【问题标题】:Insert command works without errors in C# but data is not inserted to the MS SQL Server插入命令在 C# 中正常工作,但数据未插入到 MS SQL Server
【发布时间】:2017-03-03 15:03:56
【问题描述】:

我正在尝试使用 C# 将数据插入 Microsoft SQL Server DB,并且插入命令运行良好,并且没有出现错误或异常。但是当我在 SQL Server 中检查我的数据库时,对表没有影响,并且记录没有插入到表中。这是我尝试的代码:

try
{
   SqlConnection con1 = new SqlConnection();
   con1.ConnectionString = "Server = (local); Database = My_DataBase; Integrated Security = true";
   con1.Open();
   SqlCommand cm1 = new SqlCommand();
   cm1.Connection = con1;
   cm1.CommandText = "insert into Users values('" + update.Message.Chat.Id.ToString() + "','" + update.Message.Chat.FirstName + "','" + update.Message.Chat.LastName + "','@" + update.Message.Chat.Username + "','" + req1.Status + "')";
   con1.Close();

}
catch(Exception e)
{
    Console.WriteLine(e.Message);
    continue;
}

我看到过类似的问题herehere,但答案并没有解决我的问题。

此外,当我手动将数据插入数据库并运行如下所述的选择命令时,我得到了正确的答案,但对于插入命令我没有。

SqlConnection con2 = new SqlConnection();
con2.ConnectionString = "Server = (local); Database = My_DataBase; Integrated Security = true";
con2.Open();
SqlDataAdapter da1 = new SqlDataAdapter("select * from Users where ChatID='" + update.Message.Chat.Id.ToString() + "'", con2);
DataSet ds1 = new DataSet();
da1.Fill(ds1);
con1.Close();

请帮我解决这个问题。

顺便说一下,我知道这种插入是不安全的,我想让你知道这只是一个演示,我会确保它免受 sql 注入。

【问题讨论】:

  • 我不知道 .net/c# 但它会自动提交数据吗?
  • 您甚至遇到与您链接的第二个问题相同的问题。你没有在任何地方执行...
  • 既然你说你要改变这个查询来防止sql注入,为什么要花这么多精力呢?您首先需要在测试之前修复查询。并摆脱那个基本上是空的捕获。它会在你看到它之前写入控制台,然后它就关闭了。
  • @Habib 我正在控制台应用程序中尝试此操作,我已将代码放入 try-catch 以获取可能的异常,但我没有这样做,并且 catch 块中的代码运行良好。
  • @JamesZ 主要方案不会改变,控制台不会关闭,因为程序是电报机器人,因此控制台会一直打开,直到机器人停止。我刚刚提到了一段代码。

标签: c# sql .net sql-server visual-studio


【解决方案1】:

你没有在任何地方执行你的命令。 你需要:

cm1.ExecuteNonQuery();

在您的代码中,您正在创建一个SqlCommand 对象,然后将SqlConnection 关联到它,但在您实际执行命令的地方没有。您的代码应如下所示:

   SqlConnection con1 = new SqlConnection();
   con1.ConnectionString = "Server = (local); Database = My_DataBase; Integrated Security = true";
   con1.Open();
   SqlCommand cm1 = new SqlCommand();
   cm1.Connection = con1;
   cm1.CommandText = "insert into Users values('" + update.Message.Chat.Id.ToString() + "','" + update.Message.Chat.FirstName + "','" + update.Message.Chat.LastName + "','@" + update.Message.Chat.Username + "','" + req1.Status + "'";
   cm1.ExecuteNonQuery();
   con1.Close();

除了 SQL 注入漏洞,您应该考虑将您的 SqlCommandSqlConnection 对象包含在 using 语句中,这将确保正确处置非托管资源。

【讨论】:

  • 谢谢哈比布,你说得对,我忘了执行我的命令。请解释更多关于封闭我的命令和连接。
  • @parisa,这是一本好书codeproject.com/Articles/6564/…
猜你喜欢
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
相关资源
最近更新 更多