C# 我正在尝试参数化Sql查询,但我得到了一个错误"';必须声明标量变量";

C# 我正在尝试参数化Sql查询,但我得到了一个错误"';必须声明标量变量";,c#,C#,我试图为下面代码中提到的所有这些值创建一个参数 任何帮助都将不胜感激 这就是我所做的: public static void Main() { { string testEnv = ClaimQuery.ClaimQueryhelper.getTestEnv(); // calls claimQueryhelper for the test environment var connectionStr

我试图为下面代码中提到的所有这些值创建一个参数

任何帮助都将不胜感激

这就是我所做的:

public static void Main()
    {

        {
            string testEnv = ClaimQuery.ClaimQueryhelper.getTestEnv();
            // calls claimQueryhelper for the test environment
            var connectionString = ClaimQuery.ClaimQueryhelper.getConnection(testEnv);
            // if we are not calling helper then the environment is hard coded
            //string connectionString = ConfigurationManager.ConnectionStrings["aitf"].ConnectionString;
            //ConsoleWindows.Properties.Settings.Default.ConnectionString;

            using (SqlConnection con = connectionString)
            {

                ///Sql to get the data from the Dbase
                string sql = "SELECT TOP 3 claim.CLCL_MICRO_ID,cdml.LOBD_ID,cdml.IDCD_ID,CLMD_TYPE, " +
                    "* FROM CMC_CLCL_CLAIM claim INNER JOIN CMC_CDML_CL_LINE cdml ON claim.CLCL_ID = cdml.CLCL_ID" +
                    " INNER JOIN CMC_CLMD_DIAG clmd ON claim.CLCL_ID = clmd.CLCL_ID WHERE CLCL_CUR_STS =@CLCL_CUR_STS AND @CLCL_CL_SUB_TYPE AND @CLCL_RECD_DT and @CLMD_TYPE ";

                //connecting to the Sql server
                using (SqlCommand command = new SqlCommand(sql, con))
                 //Reading the Sql database
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    command.Parameters.Add(
                        new[]
                            {
                             new SqlParameter(@"CLCL_CUR_STS", SqlDbType.Int).Value = "01",
                             new SqlParameter(@"CLCL_CL_SUB_TYPE", SqlDbType.VarChar).Value = "M",
                              new SqlParameter(@"CLMD_TYPE", SqlDbType.VarChar).Value = "01",
                              new SqlParameter(@"CLCL_RECD_DT", SqlDbType.DateTime).Value = "2017-02-03 00:00:00.000",
                             });

在使用
ExecuteReader
打开
DataReader
之前,必须迭代
SqlCommand
查询字符串(即
SqlParameter
的数组)的参数值并将其分配给该命令。请参见下面的示例:

using (SqlConnection con = new SqlConnection(connectionString))
{
     // SQL query to get the data from the database
     string sql = @"[query string here]";
     con.Open();

     // connecting to the SQL Server
     using (SqlCommand command = new SqlCommand(sql, con))
     {
         SqlParameter[] parameters = new[]
         {
             new SqlParameter(@"CLCL_CUR_STS", SqlDbType.Int).Value = "01",
             new SqlParameter(@"CLCL_CL_SUB_TYPE", SqlDbType.VarChar).Value = "M",
             new SqlParameter(@"CLMD_TYPE", SqlDbType.VarChar).Value = "01",
             new SqlParameter(@"CLCL_RECD_DT", SqlDbType.DateTime).Value = "2017-02-03 00:00:00.000",
         };

         foreach (SqlParameter sqlParam in parameters)
         {
             command.Parameters.Add(sqlParam);
         }

         // Reading the SQL database
         using (SqlDataReader reader = command.ExecuteReader())
         {
             // fetch retrieved data
         }
     }

     // other stuff

     con.Close();
}

必须声明标量变量错误显然意味着在查询语句执行期间未声明提供的一个或多个查询参数(在
DataReader
已打开后错误声明了这些参数)。

您是在通过
ExecuteReader
执行SQL之后添加参数值的。请阅读并接受以下内容:您是否尝试直接对management studio中的数据库运行查询?此语句看起来很奇怪:
其中CLCL\u CUR\u STS=@CLCL\u CUR\u STS和@CLCL\u clu SUB\u TYPE和@CLCL\u RECD\u DT和@CLMD\u TYPE
条件可能由于不相等而计算为“false:
其中CLCL\u CUR\u STS='01'和'M'以及[datetime]和'01'
谢谢,我修复了声明参数的查询,修复了我的错误