我在表单(MaskedTextBox
和MaskedTextBox1
)上有两个MaskedTextBox1
元素,代表DateFrom
和DateTo
以及一个ComboBox
({{ 1}})我已经从Collection Property部分填充了
是否可以告诉我如何使用ComboBox1
和maskedTextBoxes
替换之间的日期以替换ComboBox
Select("branch = 'EN5'").FirstOrDefault();
我尝试了以下但是它没有工作:
sda = new SqlDataAdapter(@"SELECT branch, SUM(CONVERT(DECIMAL(8,2),[can]/1.2)) AS [C1],
SUM(CONVERT(DECIMAL(8,2),[carton]/1.2)) AS [C2],
SUM(CONVERT(DECIMAL(8,2),[other])) AS [O] FROM detail
WHERE dates BETWEEN '2015-04-01' AND '2015-04-30'
GROUP BY branch ", cn);
DataSet ds = new DataSet();
sda.Fill(ds);
DataRow dr = ds.Tables[0].Select("branch = 'EN5'").FirstOrDefault();
if (dr != null)
{
label63.Text = dr["C1"].ToString();
label62.Text = dr["C2"].ToString();
}
已调整但现在收到错误消息 关键字BETWEEN附近的语法不正确
+'MaskedTextBox1.Value' And +'MaskedTextBox2.Value'
Select("branch = +'ComboBox1.Value'").FirstOrDefault();
已调整但现在收到错误消息 关键字BETWEEN附近的语法不正确
答案 0 :(得分:0)
简化,然后分裂和征服。
通常更好地准备字符串,以便您可以调试并查看值。您还可以复制SQL中的字符串以查看是否正常工作。
string strSQL = "SELECT branch, SUM(CONVERT(DECIMAL(8,2),[can]/1.2)) AS [C1],
SUM(CONVERT(DECIMAL(8,2),[carton]/1.2)) AS [C2],
SUM(CONVERT(DECIMAL(8,2),[other])) AS [O] FROM detail
WHERE dates BETWEEN " + MaskedTextBox1.Value + " And " + MaskedTextBox2.Value +
"GROUP BY branch "
sda = new SqlDataAdapter(strSQL, cn);
在sql server中更好地使用PARAMETERS来避免Sql Injection
string commandText = "UPDATE Sales.Store SET Demographics = @demographics "
+ "WHERE CustomerID = @ID;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@ID", SqlDbType.Int);
需要使用LINQ表单
Select(b => b.brand == ComboBox1.Value).FirstOrDefault();
答案 1 :(得分:0)
您不应该通过将字符串与用户输入连接来构建SQL语句,因为这会使您的应用程序容易受到SQL injection的攻击(请阅读!)。
相反,您应该使用参数化查询(as shown here for example)。在你的情况下,这将是这样的:
sda = new SqlDataAdapter(@"SELECT branch, SUM(CONVERT(DECIMAL(8,2),[can]/1.2)) AS [C1],
SUM(CONVERT(DECIMAL(8,2),[carton]/1.2)) AS [C2],
SUM(CONVERT(DECIMAL(8,2),[other])) AS [O] FROM detail
WHERE dates BETWEEN @from AND @to
GROUP BY branch ", cn);
sda.SelectCommand.Parameters.Add("@from", MaskedTextBox1.Value);
sda.SelectCommand.Parameters.Add("@to", MaskedTextBox2.Value);
然后您必须确保用户输入的格式正确。最好的方法可能是先将用户输入转换为DateTime值,然后再将它们添加到SelectCommand.Parameters
:
var from = DateTime.Parse(MaskedTextBox1.Value);
var to = DateTime.Parse(MaskedTextBox2.Value);
sda.SelectCommand.Parameters.Add("@from", from);
sda.SelectCommand.Parameters.Add("@to", to);
(另见DateTime.TryParse)。