C# 用户代码是否未处理SqlException?
我目前开始在学校学习asp.net C#,现在他们希望我将数据插入SQL Server。现在,我已经编写了这段代码,但是当我尝试向数据库中添加一些内容时,我得到了错误: 用户代码未处理SqlException System.Data.dll中发生“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理 其他信息:提供的值的列名或数量与表定义不匹配 有人能解释一下我做错了什么吗 提前谢谢 弗雷德C# 用户代码是否未处理SqlException?,c#,sql,asp.net,sql-server,C#,Sql,Asp.net,Sql Server,我目前开始在学校学习asp.net C#,现在他们希望我将数据插入SQL Server。现在,我已经编写了这段代码,但是当我尝试向数据库中添加一些内容时,我得到了错误: 用户代码未处理SqlException System.Data.dll中发生“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理 其他信息:提供的值的列名或数量与表定义不匹配 有人能解释一下我做错了什么吗 提前谢谢 弗雷德 如果有insert命令,但不想指定要在其中插入值的列,
如果有insert命令,但不想指定要在其中插入值的列,则需要按照列在表中出现的正确顺序为表中的所有列提供值 在本例中,我假设您的表Movie包含的列比应该包含Movie名称(即Title?)的列多。因此,您需要为所有列写入值,或者指定哪个列应该接收txtmovie文本框的值
SqlCommand cmd = new SqlCommand(@"INSERT INTO dbo.Movie (Title)
values(.....) ....
但是,这不是向数据库提供命令文本的正确方法。您应该始终使用参数化查询
protected void Button1_Click(object sender, EventArgs e)
{
string cmdText = @"INSERT INTO dbo.Movie (Title) values(@name)";
using(SqlConnection con = new SqlConnection(.......constring here...))
using(SqlCommand cmd = new SqlCommand(cmdText, con))
{
con.Open();
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = txtmovie.Text;
cmd.ExecuteNonQuery();
....
}
}
最后,一般来说,使用SqlConnection
(或任何其他类型的一次性对象)的最佳方法是在using语句中本地创建它,而不将它保存在全局变量中,并在不同的位置打开/关闭它。对于这种方法非常有用,因为它可以保证在异常情况下关闭和释放连接。如果您可以尝试始终保持全局对象的最少数量。如果您有insert命令并且不想指定要插入值的列,则需要按照列在表中出现的正确顺序为表中的所有列提供值 在本例中,我假设您的表Movie包含的列比应该包含Movie名称(即Title?)的列多。因此,您需要为所有列写入值,或者指定哪个列应该接收txtmovie文本框的值
SqlCommand cmd = new SqlCommand(@"INSERT INTO dbo.Movie (Title)
values(.....) ....
但是,这不是向数据库提供命令文本的正确方法。您应该始终使用参数化查询
protected void Button1_Click(object sender, EventArgs e)
{
string cmdText = @"INSERT INTO dbo.Movie (Title) values(@name)";
using(SqlConnection con = new SqlConnection(.......constring here...))
using(SqlCommand cmd = new SqlCommand(cmdText, con))
{
con.Open();
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = txtmovie.Text;
cmd.ExecuteNonQuery();
....
}
}
最后,一般来说,使用SqlConnection
(或任何其他类型的一次性对象)的最佳方法是在using语句中本地创建它,而不将它保存在全局变量中,并在不同的位置打开/关闭它。对于这种方法非常有用,因为它可以保证在异常情况下关闭和释放连接。如果您能始终保持全局对象的最少数量。您能告诉我们您的表的定义吗?如果您的列没有默认值(例如自动递增的主键列),则将引发此错误。请满足以下条件,请永远不要从
页面加载打开连接,并请同时用于连接和命令。至于实际问题,请参见语法,除非您的表有一列,否则请提供插入的列名列表。您能告诉我们表的定义吗?如果您的列没有默认值(例如自动递增的主键列),则将引发此错误。请满足以下条件,请永远不要从页面加载打开连接,并请同时用于连接和命令。至于实际问题,请参阅的语法,除非您的表有一列,否则请提供插入的列名列表。操作显示在页面加载时打开的连接,在单击按钮时关闭的连接。这也需要更改。@SelvaTS和它已被更改-更改为最初应该更改的内容。@GSerg首先,数据访问必须与业务隔离。连接、命令对象用using语句包装。操作显示连接在页面加载时打开,在按钮单击时关闭。这也需要更改。@SelvaTS和它已被更改-更改为最初应该更改的内容。@GSerg首先,数据访问必须与业务隔离。对于连接,命令对象用using语句包装。