-2

我很习惯在 SQL Server 中使用 c#。我不知道为什么一个简单的语句会无法插入数据。我的代码如下:

 query = "INSERT INTO MCDPhoneNumber ([MCDID],[PhoneNumber])" +
                    "VALUES("+maxid+", '"+tel+"')";
 SqlConnection conn = new SqlConnection("Data Source=source; ...");
 SqlCommand newCommand = new SqlCommand(query, conn);

 int success= myCommand.ExecuteNonQuery();
 if (success!= 1)
 {
      MessageBox.Show("It didn't insert anything:" + query);
 }

首先让我告诉我,我知道我应该对数据使用参数,我最初也是这样做的,但是当它失败时,我尝试了一个简单的查询,但它仍然失败。另外,我可以说我在另一个表中的那个之前有一个类似的插入,它可以工作。更有趣的是,当我将粘贴查询复制到 SQL Server Management Studio 时,它可以工作。它也不会报告过程中的任何错误。

4

2 回答 2

2

首先,您将命令定义为,newCommand但您执行的是myCommand.

您应该始终使用parameterized queries您的 sql 查询。这种字符串连接对SQL Injection攻击开放。

 query = "INSERT INTO MCDPhoneNumber (MCDID, PhoneNumber) VALUES(@maxid, @tel)";
 using(SqlConnection conn = new SqlConnection("Data Source=source; Initial Catalog=base; Integrated Security = true"))
 {
    SqlCommand newCommand = new SqlCommand(query, conn);
    conn.Open();
    newCommand.Parameters.AddWithValue("@maxid", maxid);
    newCommand.Parameters.AddWithValue("@tel", tel);

    int success= newCommand.ExecuteNonQuery();
    if (success != 1)
    {
         MessageBox.Show("It didn't insert shit:" + query);
    }
 }

请对您的错误信息更加礼貌:)

于 2013-09-25T14:05:43.353 回答
2

====================== 编辑=========================== ====

如果您希望使用旧命令对象(即 myCommand),请使用以下代码而不是创建新命令(newCommand)

 myCommand.CommandText = query;
 myCommand.CommandType = System.Data.CommandType.Text;

然后执行它

您正在使用newCommand绑定查询并执行myCommand

====================== 编辑=========================== ====

SqlCommand newCommand = new SqlCommand(query, conn);

在这里,您已经为 SQLCOMMAND 对象定义了newCommand

 int success= myCommand.ExecuteNonQuery();

并且您正在以myCommand的身份访问它

而且我认为你没有打开连接

于 2013-09-25T13:57:27.523 回答