原始代码
//sql语句
string sql = string.Empty;
//sql语句相关的 参数
List<SqlParameter> args = new List<SqlParameter>();
if (db_tag == null)
{
sql += "declare @CurrentId int; " +
"INSERT INTO [dbo].[CustomerTag] ([Name] ,[CreateUserId] ,[CreateTime] ,[PartnerId],[Deleted] ) " +
"VALUES (@Name ,@CreateUserId ,@CreateTime ,@PartnerId ,@Deleted ) ;" +
" set @CurrentId=SCOPE_IDENTITY(); " +
"INSERT INTO [dbo].[MyCustomerTag] ([CustomerId] ,[UserId] ,[TagId] ,[UpdateTime]) " +
"VALUES (@CustomerId ,@UserId ,@CurrentId ,@UpdateTime);";
args.AddRange(new List<SqlParameter> {
new SqlParameter ("Name", request.Name),
new SqlParameter ("CreateUserId", this.Token_UserId ),
new SqlParameter ("CreateTime", DateTime.Now ),
new SqlParameter ("PartnerId", this.Token_PartnerId),
new SqlParameter ("Deleted ", 0),
new SqlParameter ("CustomerId", request.CustomerId),
new SqlParameter ("UserId", this.Token_UserId),
new SqlParameter ("UpdateTime", DateTime.Now),
});
}
浏览器调试报错
{
"Code": 10004,
"Message": "参数化查询 '(@Name nvarchar(2),@CreateUserId int,@CreateTime datetime,@Partn' 需要参数 '@Deleted',但未提供该参数。"
}
找了好久的原因 发现 如果 int 值 给 0
构造函数会使用 下面这个
public SqlParameter(string parameterName, SqlDbType dbType);
正常应该使用下面的
public SqlParameter(string parameterName, object value);
如果数据库字段有默认值,遇到这样的情况就不给 数据库默认是0
如果没有有 字符串格式化吧
或者换Dapper的 封装能解决