使用环境 VS2019 .net core 3.1
今天搞访问数据库的时候发现代码执行到cmd.ExecuteNonQuery()的时候就没有再继续执行了,也没有返回值。
/// <summary>
/// 用提供的参数,在连接字符串所指定的数据库中执行SQL语句(非查询)
/// </summary>
/// <remarks>
/// 使用示例:
/// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
/// </remarks>
/// <param name="connectionString">数据库连接字符串</param>
/// <param name="commandType">命令类型(存储过程、文本等)</param>
/// <param name="commandText">存储过程名或T-SQL语句</param>
/// <param name="commandParameters">用于执行命令的参数数组</param>
/// <returns>受命令所影响的行数</returns>
public static int ExecuteNonQuery(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = SingletonConnectionFactory.GetConnection())
{
PrepareCommand(cmd, conn, null, commandType, commandText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
但是在sql profiler工具中,可以看到这条sql
我将这段sql取出来执行以下就报错了。。。。。提示我没有提供InvitationID的参数
最后发现是InvitationID在赋值的时候传的是null,但是我在创建表的时候给的默认值是'',随后我看了一下数据库中这个字段的默认值,发现并没有被设置,看样子''是不被认可的。
最后我将InvitationID赋值的时候改成string.Empty,这样生成的sql就是N'',这样就不会这些这些问题了。
public int BindCompanyUser(string Openid, string InvitationID, string OrgCode, string CompanyName)
{
string sql = @"INSERT INTO [T_WechatUserInformation]
([Openid]
,[InvitationID]
,[CompanyName]
,[OrgCode]
,[CreateDate])
VALUES
(@Openid
,@InvitationID
,@CompanyName
,@OrgCode
,GETDATE())";
SqlParameter[] sqlParameters = {
new SqlParameter("@Openid", Openid),
new SqlParameter("@InvitationID", string.IsNullOrEmpty(InvitationID)?string.Empty:InvitationID),
new SqlParameter("@CompanyName", CompanyName),
new SqlParameter("@OrgCode", OrgCode)
};
int result = SqlHelper.ExecuteNonQuery(CommandType.Text, sql, sqlParameters);
return result;
}