我想做一个非常简单的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手动向数据库添加值,这意味着数据库正常工作。但是我怎样才能正确配置连接字符串?
答案 0 :(得分:3)
不确定为什么你的连接字符串会出错 - 我个人不喜欢“AttachDbFile”方法。另外:你应该a)避免将SQL命令字符串连接起来(因为SQL注入攻击),b)你应该将SqlConnection
和SqlCommand
对象放入使用块以避免内存问题。
我的建议是:启动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我续集服务器广告试试