当前位置: 首页 > 面试题库 >

插入命令可以在C#中正常运行,但不会将数据插入到MS SQL Server中

国俊艾
2023-03-14
问题内容

我正在尝试使用C#将数据插入Microsoft SQL Server DB,并且insert命令运行良好,并且没有错误或异常。但是,当我在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;
}

同样,当我手动将数据插入数据库并运行如下所述的select命令时,我得到了正确的答案,但是对于insert命令却没有。

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注入。


问题答案:

您不在任何地方执行命令。你需要:

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();

除了SQLInjection漏洞外,您还应考虑在语句中包含SqlCommandSqlConnection对象using,以确保正确处置非托管资源。



 类似资料:
  • 我在我的几个应用程序中使用Logback将错误记录到数据库中。现在在我最新的应用程序中,我创建了一个正常使用的日志。但现在应用程序不会将任何内容记录到数据库中。 我正在使用源代码将db appender添加到记录器。代码如下所示: 当我尝试应用程序使用logback.xml文件相同的行为。没有日志写入数据库。有人能帮我吗?

  • 问题内容: 是否可以使用一个insert语句在一个表中插入多行?我知道如果发生以下情况,将会发生这种情况: 但是,如果我想插入: 只需一个插入命令? 问题答案: 两种解决方案(来源:http : //appsfr.free.fr/spip.php?article21): 或者

  • 问题内容: 我一直在看这段代码已有一段时间了,但我看不出问题出在哪里。我已经阅读了整个StackOverflow,但仍然看不到我的错误在哪里。 错误在第13行中,即thats 。我尝试通过http://www.w3schools.com/php/php_mysql_insert.asp帮助自己,但对我没有太大帮助。 问题答案: 警告: 切勿将 w3schools 用于学习目的。他们的教程中有很多错

  • LoginServlet.java create.html 使用,我将值插入到数据库中。问题是,我可以在没有登录的情况下打开和,即使没有登录,也会将值插入数据库。我知道问题在于会话没有被正确地传递(使用)。我该怎么解决呢?有人能纠正吗?

  • 我正在尝试在数据库中插入乌尔都语文本,但只有“?????”插入其中。但在本地主机上工作得很好。当我在Cent-OS服务器上部署war时,在远程服务器上面临的问题。MySQL server 5.5.15正在Cent-OS服务器上运行。

  • 问题内容: 在MySQL中,您可以像这样插入多行: 但是,尝试执行此类操作时出现错误。是否可以一次在SQLite数据库中插入多行?这样做的语法是什么? 问题答案: 更新 正如BrianCampbell在此处指出的那样,SQLite 3.7.11及更高版本现在支持原始文章的更简单语法 。但是,如果您希望在旧数据库之间实现最大兼容性,则所示的方法仍然适用。 原始答案 如果有特权,River的回答:您可