为什么我不能将数据插入我的数据库?

时间:2011-04-24 16:02:12

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

我想做一个非常简单的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 studion 2008和SQL server 2005.我没有任何其他小工具我可以从visual studio手动向数据库添加值,这意味着数据库正常工作。但是我怎样才能正确配置连接字符串?

4 个答案:

答案 0 :(得分:3)

不确定为什么你的连接字符串会出错 - 我个人不喜欢“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查询看起来还不错 - 它应该可以正常工作。

AttachDbFile=UserInstance=true的问题是(除其他事项外)他们经常在每次应用运行时从头开始初始化数据库。绝对有可能你的插件确实有效,但是下次你运行你的应用程序时,它会再次初始化为默认状态并让你相信它没有做任何事情......

答案 1 :(得分:1)

 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";

答案 2 :(得分:1)

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

所以我所做的就像写的那样:

  

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

你可以看到它here

答案 3 :(得分:0)

如果您在某个公司编写代码,请不要编写如下代码,否则会导致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并说明中断异常并选择checkBox运行时错误,它可以告诉您错误是什么。

另外,直接粘贴你的sql我续集服务器广告试试