为什么我不能在数据库中插入数据?

本文关键字:插入 数据 数据库 不能 为什么 | 更新日期: 2023-09-27 17:52:35

我想做一个非常简单的INSERT INTO操作,但是什么也没有发生。我没有看到错误,也没有看到数据库中有任何变化。

我怀疑我的连接字符串是错误的,但我怎么知道呢?如果是这样,我该如何解决?(本地主机)

protected void RegButton_Click(object sender, EventArgs e)
{
   string connString = "Data Source=.''SQLEXPRESS;AttachDbFilename=C:''Users''Bodin''Desktop''FullFart''App_Data''database.mdf;Integrated Security=True;User Instance=True";
   string sql = "INSERT INTO student (navn, etternavn)  " + "VALUES('" + NavnTextBox.Text + "', '" + EtterNavnTextBox.Text + "');";
   SqlConnection conn = new SqlConnection(connString);
   SqlCommand myCommand = new SqlCommand(sql,conn);
   try
   {
      conn.Open();
      myCommand.ExecuteNonQuery();
   }
   catch (Exception ex)
   {
      Console.WriteLine("Error: " + ex);
   }
   finally
   {
      conn.Close();
   }        
}

知道为什么上面的代码什么都不做吗?(每次执行时都应该添加新行)

更新

SQL注入相关。这是一些作业的演示程序,这就是为什么我不使用参数。这是我朋友的笔记本电脑,我只安装了Visual studio 2008和SQL server 2005。我没有任何其他小工具,我可以从visual studio手动添加值到数据库,所以这意味着数据库的工作。但是我如何正确配置连接字符串?

为什么我不能在数据库中插入数据?

不知道为什么你的连接字符串是错误的-我个人不喜欢"AttachDbFile"方法。另外:你应该a)避免连接在一起你的SQL命令字符串(因为SQL注入攻击),b)你应该把你的SqlConnectionSqlCommand对象使用块,以避免内存问题。

我的建议是:启动SQL Server Mgmt Studio Express和附加数据库到您的SQL Server Express服务器-然后使用这样的东西:

string connString = "Server=.''SQLEXPRESS;database=YourDatabase;Integrated Security=True";
string query = "INSERT INTO dbo.Student(navn, etternavn) " + 
   "VALUES(@navn, @etternvan)";
using(SqlConnection conn = new SqlConnection(connString))
using(SqlCommand myCmd = new SqlCommand(query, conn))
{
   // set up parameters
   myCmd.Parameters.Add("@navn", SqlDbType.VarChar, 100).Value = NavnTextBox.Text.Trim();
   myCmd.Parameters.Add("@etternavn", SqlDbType.VarChar, 100).Value = EtterNavnTextBox.Text.Trim();
   try
   {
       conn.Open();
       myCmd.ExecuteNonQuery();
       conn.Close();
   }
   catch (Exception ex)
   {
      Console.WriteLine("Error: " + ex);
   }
}

这样的SQL查询从我的角度来看是OK的-它应该工作得很好。

AttachDbFile=UserInstance=true的问题是(除其他事项外),它们经常从头开始初始化数据库,每次应用程序运行时。这完全有可能你的插入真的起作用了,但下次你运行应用时,它又被初始化为默认状态让你相信它什么都没做.....

 SqlConnection con = new SqlConnection("Server=.''SQLEXPRESS;AttachDbFilename=|DataDirectory|''Database.mdf;Trusted_Connection=True;User Instance=yes");    
 con.Open();
 SqlCommand cmd = new SqlCommand("Insert into pro_details values('" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "')", con);
 cmd.ExecuteNonQuery();

以这种方式使用连接字符串

con = new SqlConnection("Data Source=.''SQLEXPRESS;AttachDbFilename=C:''Documents and Settings''Administrator''My Documents''Visual Studio 2008''WebSites''WebSitelab''App_Data''Database.mdf;Integrated Security=True;User Instance=True");

请检查您的连接字符串

string connString = "Data Source=.''SQLEXPRESS;AttachDbFilename=C:''Users''Bodin''Desktop''FullFart''App_Data''database.mdf;Integrated Security=True;User Instance=True";

我知道我迟到了,但我现在正面临这个问题,并找到了解决方案。我想分享一下,如果有人来这里寻求帮助....

所以我所做的就是:

您可以将数据文件保留在项目之外,并创建一个在数据库资源管理器中连接到它。当IDE要求您携带把文件放进项目里,就说不。这样,既节省了设计时间运行时将使用相同的数据文件但缺点是连接字符串中的路径将被硬编码因此,分享项目和部署应用程序将变得更加困难。在部署应用程序之前,请确保替换了文件中的完整路径带有相对路径的设置。

你可以在这里看到

如果你在某个公司写代码,不要这样写,这会导致SQL注入。

string sql = "INSERT INTO student (navn, etternavn)  " + "VALUES('" + NavnTextBox.Text + "', '" + EtterNavnTextBox.Text + "');";

改变…

nonqueryCommand.CommandText = "INSERT INTO MyTable VALUES (@MyName, @MyNumber)";
nonqueryCommand.Parameters.Add("@MyName", SqlDbType.VarChar, 30);
nonqueryCommand.Parameters.Add("@MyNumber", SqlDbType.Int);

说到为什么它不能工作,你可以很容易地进入visual Studio,使用调试选项找到原因。使用Ctrl + Alt + E并选择break on exceptions和checkBox runtime errors,它可以告诉你错误是什么。

否则,直接将SQL粘贴到sequel server上,然后尝试一下