sql查询显示两列C#之间的价​​格数据

时间:2016-12-07 07:11:50

标签: c# sql-server-ce

编辑:我无法在下面格式化我的代码,如果任何人可以修复它。

我是sql查询的新手,还在学习。

表名:CommissionSetupTable。

如果gross_amount介于@FromRate和@ToRate的范围之内,我想显示@Paisa

enter image description here

以下是我的代码:

    string paisa;
        private void load_commission_setup()
        {
            SqlCeConnection conn = null;
            SqlCeCommand cmd = null;
            SqlCeDataReader rdr = null;

        try
        {
            conn =
                new SqlCeConnection(
                   @"Data Source=|DataDirectory|\Database.sdf;Persist Security Info=False");
            conn.Open();

            int rowindex = purchaseBillTableDataGridView.Rows.Count - 1;
            gross_amount = double.Parse(purchaseBillTableDataGridView[10, rowindex].Value.ToString());

            // Gross Amount is between the ranges of FromRate and ToRate.


            cmd = new SqlCeCommand("SELECT Paisa FROM CommissionSetupTable WHERE='" + gross_amount.ToString() + "' BETWEEN @FromRate AND @ToRate;", conn);
            rdr = cmd.ExecuteReader();

            if (rdr == null)
            {
            }
            else
            {
                while (rdr.Read())
                {
                    paisa = rdr["Paisa"].ToString();

                }
                rdr.Close();
                cmd.Dispose();
            }
        }
        finally
        {
            conn.Close();
            int rowindex = purchaseBillTableDataGridView.Rows.Count - 1;
            purchaseBillTableDataGridView[11, rowindex].Value = paisa;
        }
    }

1 个答案:

答案 0 :(得分:1)

此处使用的正确语法如下

  cmd = new SqlCeCommand(@"SELECT Paisa FROM CommissionSetupTable 
        WHERE @gross BETWEEN FromRate AND ToRate;", conn);

请注意,两个字段名称不应以@为前缀,否则它们将被视为参数占位符。

现在,在执行命令之前,添加@gross占位符

的参数
 cmd.Parameters.Add("@gross", SqlDbType.Decimal).Value = gross_amount;

我不知道FromRate和EndRate列的确切数据类型是什么,但是 请注意,您应该为参数使用正确的数据类型。不要传递字符串并期望数据库引擎为您执行转换。 (或者更糟糕的是使用ToString()将你的值连接到sql的其余部分)。如果数据库引擎有时能理解你的值,这也总是错误的。

修改
此外,根据您的评论,似乎这一行是错误的

int rowindex = purchaseBillTableDataGridView.Rows.Count - 1;

如果您的DataGridView将属性AllowUserToAddRow设置为True,那么您要使用

int rowindex = purchaseBillTableDataGridView.Rows.Count - 2;

因为第一行指向添加到DataGridView的空行以插入新记录。