为什么我的sql查询是坏格式化从ExecuteNonQuery方法

本文关键字:格式化 ExecuteNonQuery 方法 我的 sql 查询 为什么 | 更新日期: 2023-09-27 18:09:55

我有一个具有这些参数的存储过程:

ALTER PROCEDURE [dbo].[myStoredProc] 
-- Add the parameters for the stored procedure here
@myParam1 nvarchar(50),
@myParam2 date,
@myParam3 date,
@myParam4 time,
@myParam5 time,
@myParam6 int = 1,
@myParam7 nvarchar(50),
@myParam8 int,
@myParam9 nvarchar(50),
@myParam10 nvarchar(500),
@myParam11 nvarchar(100) = NULL,
@myParam12 nvarchar(1000) = NULL,
@myParam13 nvarchar(100) = NULL,
@myParam14 nvarchar(1000) = NULL,
@myParam15 date = NULL,
@myParam16 bit = NULL,
@myParam17 nvarchar(50) = NULL,
@myParam18 nvarchar(50) = NULL,
@myParam19 nvarchar(500) = NULL,
@myParam20 bit = NULL,
@myParam21 nvarchar(50) = NULL,
@myParam22 nvarchar(50) = NULL,
@myParam23 nvarchar(50) = NULL,
@myParam24 nvarchar(50) = NULL,
@myParam25 nvarchar(500) = NULL,
@myParam26 int = NULL,
@myParam27 int = NULL

我是这样用c#调用它的:

string sqlQuery = "[dbo].[myStoredProc] @myParam1, @myParam2, @myParam3,    @myParam4, @myParam5, @myParam6, @myParam7, @myParam8, @myParam9, @myParam10, @myParam11, @myParam12, @myParam13, @myParam14";
SqlCommand command = new SqlCommand(sqlQuery, conn);
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam1", SqlDbType = SqlDbType.NVarChar, Value = "Nouri, Florian" });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam2", SqlDbType = SqlDbType.Date, Value = DateTime.Today });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam3", SqlDbType = SqlDbType.Date, Value = DateTime.Today });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam4", SqlDbType = SqlDbType.Time, Value = "9:30" });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam5", SqlDbType = SqlDbType.Time, Value = "10:30" });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam6", SqlDbType = SqlDbType.NVarChar, Value = "this is param6" });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam7", SqlDbType = SqlDbType.Int, Value = 4 });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam8", SqlDbType = SqlDbType.NVarChar, Value = "param8" });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam9", SqlDbType = SqlDbType.NVarChar, Value = "param9" });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam10", SqlDbType = SqlDbType.NVarChar, Value = "Nouri, Florian" });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam11", SqlDbType = SqlDbType.NVarChar, Value = "" });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam12", SqlDbType = SqlDbType.NVarChar, Value = "" });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam13", SqlDbType = SqlDbType.NVarChar, Value = "" });
command.Parameters.Add(new SqlParameter { ParameterName = "@myParam14", SqlDbType = SqlDbType.Int, Value = 1 });
conn.Open();
command.ExecuteNonQuery();
conn.Close();

,当我执行代码时,我得到一个格式化错误的字符串(在SQL Profiler中):

exec sp_executesql N'[dbo].[myStoredProc] @myParam1, @myParam2, @myParam3, @myParam4, @myParam5, @myParam6, @myParam7, @myParam8, @myParam9, 
@myParam10, @myParam11, @myParam12, @myParam13, @myParam14',N'@myParam1 nvarchar(14),@myParam2 date,@myParam3 date,@myParam4 time(7),@myParam5 time(7),@myParam6 nvarchar(22),@myParam7 int,@myParam8 nvarchar(8),@myParam9 nvarchar(8),@myParam10 nvarchar(14),@myParam11 nvarchar(4000),@myParam12 nvarchar(4000),@myParam13 nvarchar(4000),@myParam14 int',@myParam1=N'Nouri, Florian',@myParam2='2016-10-03',@myParam3='2016-10-03',@myParam4='09:30:00',@myParam5='10:30:00',@myParam6=N'this is param6',@myParam7=4,@myParam8=N'param8',@myParam9=N'param9',@myParam10=N'Nouri, Florian',@myParam11=N'',@myParam12=N'',@myParam13=N'',@myParam14=1

我不知道为什么类型和长度(nvarchar,时间…)在字符串中。知道吗?我尝试使用AddWithParameter方法,但我得到相同的字符串。

为什么我的sql查询是坏格式化从ExecuteNonQuery方法

看这个。你少了一个EXEC:

string sqlQuery = "exec [dbo].[myStoredProc] ..."

将生成以下SQL:

exec sp_executesql N'exec [dbo].[myStoredProc] ...'

或者,您也可以使用此处描述的CommandType.StoredProcedure