将文本框转换为多值,参数化的SQL查询

时间:2019-01-07 17:43:01

标签: c# sql textbox parameterized

我是C#的新手,但是对C,Python和MATLAB有一定的经验。我编写了一个简单的C#程序,该程序接受一些用户输入并将其转换为(参数化的)SQL查询。我已经成功地将datetimepicker转换为SQL查询;但是,我有另一个参数(序列号),用户可以将其输入到文本框中。他们可以输入多个序列号,以逗号分隔。用户单击“提交”后,将发送SQL查询,并将结果显示在dataGridView中。

它只能使用一个值(即一个序列号),但是当我尝试输入多个值时,它不起作用。

我尝试了一些建议,例如将文本框字符串分成值数组。

    private DataTable GetResults()
    {

        DataTable dtResults = new DataTable();
        string connString = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString;
        using (SqlConnection con = new SqlConnection(connString))
        {
            using (SqlCommand cmd = con.CreateCommand())
            {

                string[] numbers = textBox2.Text.Split(',');
                var parameters = new string[numbers.Length];

                for (int i = 0; i < numbers.Length; i++)
                {
                    parameters[i] = string.Format("@SN{0}", i);
                    cmd.Parameters.AddWithValue(parameters[i], numbers[i]);
                }

                cmd.CommandText = string.Format("SELECT [TestDate],[ParamName],[SerialNumber],[TestDataID],[MeasuredValue]," +
                    "[MaximumLimit],[MinimumLimit],[PassResult] FROM [dbo].[Device.ParametricTestResults] " +
                    "WHERE SerialNumber IN ({0}) " +
                    "AND (TestDate BETWEEN (@start) AND (@end)) " +
                    "AND PassResult = 1", string.Join(", ", parameters));


                cmd.Parameters.AddWithValue("@start", dateTimePicker1.Text);
                cmd.Parameters.AddWithValue("@end", dateTimePicker2.Text);
                con.Open();

                SqlDataReader reader = cmd.ExecuteReader();
                dtResults.Load(reader);
            }
        }
        return dtResults;
    }

“提交”按钮上附加了以下代码:

private void button12_Click(object sender, EventArgs e)
    {
        TestResultsdataGridView.DataSource = GetResults();
    }

同样,datagridview应该显示多个序列号的条目,但仅适用于一个。

0 个答案:

没有答案