为什么不工作问题是来自字符串的更新语句 [英] Why dont work problem is update statement from string

查看:72
本文介绍了为什么不工作问题是来自字符串的更新语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

< pre> private void prijavaAction()
{
if(textBox1.Text.All(char.IsDigit))

{
string queryString =SELECT [ime_prezime] FROM dbo.radnici WHERE bar_kod ='+ textBox1.Text +'; // pronaci radnika u bazi
using(SqlConnection connection = new SqlConnection(cs))
{
SqlCommand command = new SqlCommand(queryString,connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
try
{
if(reader.Read())
{
notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml(#FFE11A);
messageLabel.Text =(reader [ime_prezime]。ToString())+je prijavljen u \ n+ DateTime.Now.ToString(dd.MM.yyyy HH:mm:ss);
readerresultTextbox.Text =(reader [ime_prezime]。ToString());
}
else
{
notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml(#FD7400);
messageLabel.Text =Radnik ne postoji u bazi!\\\
Proveritevašukarticuili probajte ponovo!;
textBox1.Text =;
}
}
最后
{

string prijava =来自dbo.prijava_radnika的SELECT count(*)其中vrijemeprijave不为null且vrijemeodjave为null和brojprijavnice2是NULL和radnik =+ readerresultTextbox.Text;
SqlCommand provjeraprijaveradnika = new SqlCommand(prijava);
//con.Open();




if((prijava!= null))// radi
// if((prijava!))
{
String saveStaff =INSERT INTO dbo.prijava_radnika(vrijemeprijave,status,radnik)VALUES(@ vrijemeprijave,'prijavljen',@ radnik);


使用(SqlConnection openCon2 = new SqlConnection(cs))
{

using(SqlCommand querySaveStaff = new SqlCommand(saveStaff))
{
querySaveStaff.Connection = openCon2;
querySaveStaff.Parameters.Add(@ vrijemeprijave,SqlDbType.DateTime).Value = DateTime.Now;
querySaveStaff.Parameters.Add(@ radnik,SqlDbType.VarChar,255).Value = readerresultTextbox.Text;
openCon2.Open();
querySaveStaff.ExecuteNonQuery();
openCon2.Close();
}


}

}

其他

{
String updateStaff =UPDATE dbo.prijava_radnika SET vrijemeprijave = @ vrijemeodjave,status ='odjavljen'WHERe radnik =+ provjeraprijaveradnika.ToString();


使用(SqlConnection openCon3 = new SqlConnection(cs))
{

using(SqlCommand queryupdateStaff = new SqlCommand(updateStaff))
{
queryupdateStaff.Connection = openCon3;
queryupdateStaff.Parameters.Add(@ vrijemeodjave,SqlDbType.DateTime).Value = DateTime.Now;
openCon3.Open();
queryupdateStaff.ExecuteNonQuery();
openCon3.Close();
}


}



}

//完成后始终致电关闭读。
reader.Close();
}

}
}
else
{
notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml(#FD7400) ;
messageLabel.Text =Bar kodnijevažeciili nije bar kod;
textBox1.Text =;


}
}





我的尝试:



问题是更新,插入工作正常。必须在字符串querystring中的radnik列中找到dbo.prijava_radnika并更新(如果存在)。如果不存在则插入

解决方案

我认为问题在于:

 SqlCommand provjeraprijaveradnika = new SqlCommand(prijava) ); 
//con.Open();

if((prijava!= null))// radi

这里缺少代码,请使用以下代码:

 con.Open(); 
Int32 prijavaCount =(Int32)provjeraprijaveradnika.ExecuteScalar();
if(prijavaCount< = 0)



编程的一个重要方面是调试,你可以在代码中设置断点看看它们是否被点击,请点击此处获取更多信息:使用断点 [ ^ ]


A正确的方法是在SQL服务器端使用 UPDATE + SELECT 。请参阅:更新不起作用... sql条件我必须插入 [ ^ ]。我建议创建存储过程 [ ^ ]。

<pre>private void prijavaAction()
        {
            if (textBox1.Text.All(char.IsDigit))

            {
                string queryString = "SELECT [ime_prezime]  FROM dbo.radnici WHERE bar_kod='" + textBox1.Text + "'";// pronaci radnika u bazi
                using (SqlConnection connection = new SqlConnection(cs))
                {
                    SqlCommand command = new SqlCommand(queryString, connection);
                    connection.Open();
                    SqlDataReader reader = command.ExecuteReader();
                    try
                    {
                        if (reader.Read())
                        {
                            notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFE11A");
                            messageLabel.Text = (reader["ime_prezime"].ToString()) + "  je prijavljen u \n " + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss");
                            readerresultTextbox.Text = (reader["ime_prezime"].ToString());
                         }
                        else
                        {
                            notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml("#FD7400");
                            messageLabel.Text = "Radnik ne postoji u bazi! \nProverite vašu karticu ili probajte ponovo!";
                            textBox1.Text = "";
                        }
                    }
                    finally
                    {

                        string prijava = "SELECT count (*) from dbo.prijava_radnika where vrijemeprijave is not null and vrijemeodjave is null and brojprijavnice2 is NULL and radnik=" + readerresultTextbox.Text;
                        SqlCommand provjeraprijaveradnika = new SqlCommand(prijava);
                        //con.Open();




                        if ((prijava != null)) //radi
                            //if ((prijava !))
                        {
                            String saveStaff = "INSERT INTO dbo.prijava_radnika (vrijemeprijave, status, radnik) VALUES(@vrijemeprijave,'prijavljen',@radnik)";


                            using (SqlConnection openCon2 = new SqlConnection(cs))
                            {

                                using (SqlCommand querySaveStaff = new SqlCommand(saveStaff))
                                {
                                    querySaveStaff.Connection = openCon2;
                                    querySaveStaff.Parameters.Add("@vrijemeprijave", SqlDbType.DateTime).Value = DateTime.Now;
                                    querySaveStaff.Parameters.Add("@radnik", SqlDbType.VarChar, 255).Value = readerresultTextbox.Text;
                                    openCon2.Open();
                                    querySaveStaff.ExecuteNonQuery();
                                    openCon2.Close();
                                }


                            }

                        }

                        else

                        {
                            String updateStaff = "UPDATE dbo.prijava_radnika SET vrijemeprijave=@vrijemeodjave, status='odjavljen' WHERE radnik=" + provjeraprijaveradnika.ToString();


                            using (SqlConnection openCon3 = new SqlConnection(cs))
                            {

                                using (SqlCommand queryupdateStaff = new SqlCommand(updateStaff))
                                {
                                    queryupdateStaff.Connection = openCon3;
                                    queryupdateStaff.Parameters.Add("@vrijemeodjave", SqlDbType.DateTime).Value = DateTime.Now;
                                    openCon3.Open();
                                    queryupdateStaff.ExecuteNonQuery();
                                    openCon3.Close();
                                }


                            }

                           

                        }

                    // Always call Close when done reading.
                    reader.Close();
                    }
                
                  }
            }
            else
            {
                notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml("#FD7400");
                messageLabel.Text = "Bar kod nije važeci ili nije bar kod";
                textBox1.Text = "";


            }
        }



What I have tried:

Problem is update, insert working fine. Must find in dbo.prijava_radnika in column radnik from string querystring and update if exist. if not exist then insert

解决方案

I think the problem is in:

SqlCommand provjeraprijaveradnika = new SqlCommand(prijava);
//con.Open();

if ((prijava != null)) //radi

Here code is missing, use something like this:

con.Open();
Int32 prijavaCount = (Int32) provjeraprijaveradnika.ExecuteScalar();
if (prijavaCount <= 0)


An important aspect of programming is debugging, you can set breakpoints in your code and see if they are hit, see here for more info: Using Breakpoints[^]


A proper way to achieve that is to use UPDATE + SELECT on SQL server side. See: Update not work...sql condition I must insert[^]. I'd suggest to create stored procedure[^].


这篇关于为什么不工作问题是来自字符串的更新语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆