【发布时间】:2020-08-25 02:50:21
【问题描述】:
我在 .NET 中开发时发现了一个错误。我在使用存储过程时遇到问题。我这样设置变量@A:
@A NVARCHAR(50) = ""
.NET 数据库连接后发送到'20-001'
cmd.Parameters.AddWithValue("@a", test.a);
但我得到一个错误
System.Data.SqlClient.SqlException (0x80131904):将 nvarchar 值“22 001”转换为数据类型 int 时转换失败。
我的代码
[HttpPost]
public JsonResult test([FromBody]test test)
{
int result = 0;
if (ModelState.IsValid)
{
SqlConnection conn = new SqlConnection(source());
conn.Open();
SqlCommand cmd = new SqlCommand("[test].[test]", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@FLAG", test.test);
cmd.Parameters.AddWithValue("@REQTYPE", "test_INSERT");
cmd.Parameters.AddWithValue("@test", test.a);
using(SqlDataReader reader = cmd.ExecuteReader())
{
while(reader.Read())
{
result = (int)reader[0];
}
reader.Close();
}
}
if (result != 0)
{
return Json(new { success = false });
}
return Json(new { success = true });
}
存储过程:
@a NVARCHAR(50) = ''
INSERT INTO test(a) VALUES (@a)
【问题讨论】:
-
不要使用addwithvalue。
-
并显示用于执行 sql 语句的完整应用程序代码。
-
使用
Add方法。显式初始化器可以处理更具挑战性的情况,例如sqlCommand.Parameters.Add( new SqlParameter() { ParameterName = "@Filename", SqlDbType = SqlDbType.VarChar, Size = 256, Direction = System.Data.ParameterDirection.InputOutput, Value = "Foo.bar" } );. -
链接到的文章解释了如何正确添加它们。
-
另外,由于您正在执行一个执行
INSERT的存储过程,因此不会返回结果集,您应该真正使用SqlCommand.ExecuteNonQuery()而不是ExecuteReader...。
标签: .net sql-server