使用環境 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;
}