C# 为什么赢了';我的代码不能写入SQL吗?

C# 为什么赢了';我的代码不能写入SQL吗?,c#,sql,service,C#,Sql,Service,我正在编写一个将文本存储到SQL数据库的应用程序,但我的代码引发了一个异常,即“变量名@par1已经声明”,我不确定如何使其正常工作,如果可能的话,希望得到一些帮助以解决此问题,请=] 下面是违规代码 private void SMSGetter() { try { DecodedShortMessage[] messages = Comm.ReadMessages(PhoneMessageStatus.All, PhoneStora

我正在编写一个将文本存储到SQL数据库的应用程序,但我的代码引发了一个异常,即“变量名@par1已经声明”,我不确定如何使其正常工作,如果可能的话,希望得到一些帮助以解决此问题,请=]

下面是违规代码

 private void SMSGetter()
    {
         try {

                DecodedShortMessage[] messages = Comm.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Sim);
                SqlConnection Conn = new SqlConnection("Data Source=*********;Initial Catalog=********;User ID=**********;Password=***********");
                SqlCommand com = new SqlCommand();
                com.Connection = Conn;
                Conn.Open();
                foreach (DecodedShortMessage message in messages)
                {

                    //com.CommandText = ("INSERT INTO SMSArchives(Message,Blacklist) VALUES ('" + message.Data.UserDataText + "', 'Yes')");
                    //com.ExecuteNonQuery();
                    com.CommandText = ("INSERT INTO SMSArchives(Message,Blacklist) VALUES (@par1,@par2)");
                    com.Parameters.AddWithValue("@par1", message.Data.UserDataText);
                    com.Parameters.AddWithValue("@par2", "Yes");
                    com.ExecuteNonQuery();
                }
                Conn.Close();

            }
            catch (Exception ex) {
                Log(ex.ToString());
            }
        }

每次迭代都使用相同的命令,但每次都添加参数。试着打电话

com.Parameters.Clear();
在每个循环迭代的末尾。您还可以预先创建参数,只需设置每次迭代的
.Value
——可能会稍微快一点


另外:修复SQL注入漏洞:)

每次迭代都使用相同的命令,但每次都添加参数。试着打电话

com.Parameters.Clear();
在每个循环迭代的末尾。您还可以预先创建参数,只需设置每次迭代的
.Value
——可能会稍微快一点


另外:修复SQL注入漏洞:)

您正在foreach中的每次迭代中添加参数。考虑以下事项:

        com.CommandText = ("INSERT INTO SMSArchives(Message,Blacklist) VALUES (@par1,@par2)");
        command.Parameters.Add(new SqlParameter("@par1", ""));
        com.Parameters.AddWithValue("@par2", "Yes");
        foreach (DecodedShortMessage message in messages)
        {
            command.Parameters["@par1"].Value = message.Data.UserDataText;
            com.ExecuteNonQuery();
        }

在foreach中的每次迭代中都要添加参数。考虑以下事项:

        com.CommandText = ("INSERT INTO SMSArchives(Message,Blacklist) VALUES (@par1,@par2)");
        command.Parameters.Add(new SqlParameter("@par1", ""));
        com.Parameters.AddWithValue("@par2", "Yes");
        foreach (DecodedShortMessage message in messages)
        {
            command.Parameters["@par1"].Value = message.Data.UserDataText;
            com.ExecuteNonQuery();
        }

你有一个令人讨厌的SQL注入攻击表面。有些输入使用参数,但并非所有输入都使用参数,这似乎很奇怪。问题是,您不需要在循环中添加参数或重新定义commandtext。它抛出一个异常,说我需要声明标量变量@par3You有一个令人讨厌的SQL注入攻击面。有些输入使用参数,但并非所有输入都使用参数,这似乎很奇怪。问题是,您不需要在循环中添加参数或重新定义commandtext。这应该在之前完成一次。它抛出一个异常,表示我需要声明标量变量@par3