如何根据许多文本框编写sql命令

时间:2014-03-06 13:40:42

标签: c# sql-server

我的页面中有4个TextBox,我想根据输入的参数编写sql命令代码。用户至少选择填充一个或多个文本框。 所以我需要一个代码来选择填写的文本框功能的表单数据库。 它是一个使用参数从数据库中过滤的过滤函数

2 个答案:

答案 0 :(得分:1)

试试这个

Imports System.IO
Imports System.Text

Dim sql As New StringWriter()

    sql.WriteLine("Select col1, col2 , col3")
    sql.WriteLine("From yourtable ")
    sql.WriteLine("Where 1 =1 ")
    f Txt1.Text.Length > 0 Then
        sql.WriteLine("and col1 Like '%" + Txt1.Text + "%'")
    End If

    If Txt2.Text.Length > 0 Then
        sql.WriteLine("and col2 '%" + Txt2.Text + "%'")
    End If

    If Txt3.Text.Length > 0 Then
        sql.WriteLine("and col3 Like '%" + Txt3.Text + "%'") 
    End If
    If Txt4.Text.Length > 0 Then
        sql.WriteLine("and col4 Like '%" + Txt4.Text + "%'") 
    End If

表示c#

using System.IO;
using System.Text;
StringWriter sql = new StringWriter();

sql.WriteLine("Select col1, col2 , col3");

sql.WriteLine("From yourtable ");

sql.WriteLine("Where 1 =1 ");


if ((Txt1.Text.Length > 0)) {
sql.WriteLine(("and col1 Like \'%" 


 + (Txt1.Text + "%\'")));

}

if ((Txt2.Text.Length > 0)) {
sql.WriteLine(("and col2 \'%" 


 + (Txt2.Text + "%\'")));
}
if ((Txt3.Text.Length > 0)) {
sql.WriteLine(("and col3 Like \'%" 
+ (Txt3.Text + "%\'")));
}
if ((Txt4.Text.Length > 0)) {
sql.WriteLine(("and col4 Like \'%" 
+ (Txt4.Text + "%\'")));
}

然后发送sql作为命令 如果有任何语法缺失或任何逗号,所以使它正确,因为我没有IDE

写它

答案 1 :(得分:1)

您需要使用if条件。

  private void BuildCommand()
        {
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("You must fill out text box 1");
                return;
            }

            var sb = new StringBuilder();

            sb.AppendLine("select column1, column2, column3");
            sb.AppendLine("from MyTableName");
            sb.AppendLine("Where");
            sb.AppendLine(textBox1.Text);

            if (!string.IsNullOrEmpty(textBox2.Text))
            {
                sb.AppendLine(textBox2.Text);    
            }

            if (!string.IsNullOrEmpty(textBox3.Text))
            {
                sb.AppendLine(textBox3.Text);
            }

            if (!string.IsNullOrEmpty(textBox4.Text))
            {
                sb.AppendLine(textBox4.Text);
            }
        }

现在这样做的问题是你打开了自己的SQL注入。这是一种危险的模式,不应该使用!!!!

这是一种更好的方式:

 private void BuildCommand()
        {
            if (string.IsNullOrEmpty(textBox1.Text))
            {
                MessageBox.Show("You must fill out text box 1");
                return;
            }

            var sb = new StringBuilder();
            var sqlparams = new Dictionary<string, string>();

            sb.AppendLine("select column1, column2, column3");
            sb.AppendLine("from MyTableName");
            sb.AppendLine("Where");
            sb.AppendLine("param1 = @param1");
            sqlparams.Add("param1", textBox1.Text);
            if (!string.IsNullOrEmpty(textBox2.Text))
            {
                sb.AppendLine("and param2 = @param2");
                sqlparams.Add("param2", textBox2.Text);
            }

            if (!string.IsNullOrEmpty(textBox3.Text))
            {
                sb.AppendLine("and param3 = @param3");
                sqlparams.Add("param3", textBox3.Text);
            }

            if (!string.IsNullOrEmpty(textBox4.Text))
            {
                sb.AppendLine("and param4 = @param4");
                sqlparams.Add("param4", textBox4.Text);
            }

            var cmd = new SqlCommand(sb.ToString());
            foreach (var sqlparam in sqlparams)
            {
                cmd.Parameters.Add(sqlparam.Key, sqlparam.Value);
            }
        }