我是sql查询的新手,还在学习。
表名:CommissionSetupTable。
如果gross_amount介于@FromRate和@ToRate的范围之内,我想显示@Paisa
以下是我的代码:
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;
}
}
答案 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的空行以插入新记录。