C#Tuple - 如何根据文本框

时间:2018-05-14 01:56:03

标签: c# sql tuples

我正在创建一个测试,根据用户需要进行的测试填充单选按钮。

测试由管理员在表格中创建。我们目前已经设置了一个收藏颜色表,但是我希望能够在未来验证我们的代码,以便可以选择其他测试。下面是我的代码,但它很快完成,因此在SQL语句中硬编码了Favorite Color表。

我也使用TUPLE在二元对中设置问题。这允许用户在2个选项之间进行选择。见下文。

//Loads the Test data from the DB and organizes the data into Tuple Binary Pairs
    private void TestF_Load(object sender, EventArgs e)
    {
        list = new List<Tuple<string, string>>();
        tempTable = new DataTable();
        tempTable.Columns.Add("Item1");
        tempTable.Columns.Add("Item2");
        tempTable.Columns.Add("Value");
        var tkey = new DataColumn[] { tempTable.Columns[0], tempTable.Columns[1] };
        tempTable.PrimaryKey = tkey;
        SqlCommand cmd = new SqlCommand("SELECT item_name FROM TEST_ITEMS I JOIN TESTS T ON I.test_id = T.test_id WHERE test_name = 'Favorite Colors'", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        total = dt.Rows.Count;
        for (int i = 0; i < total - 1; i++)
        {
            for (int j = total; j > i + 1; j--)
            {
                list.Add(new Tuple<string, string>(dt.Rows[i].ItemArray[0].ToString(), dt.Rows[j - 1].ItemArray[0].ToString()));
            }
        }

        // Get the items from the DB for test X (id = 1)
        // Randomize pairings
        // Present list[0].Item1
        // Author Nils Updated 5/8
        radioButton1.Text = list[0].Item1;
        radioButton2.Text = list[0].Item2;
        radioButton3.Text = "Undecided";
        location++;
        total = list.Count;
    }

有没有办法让用户在文本框中输入测试名称,然后根据输入更新SQL语句?

我将textBox1作为我预先建立的文本框,并在输入输入后选择一个按钮,但是,我的所有迭代都会产生radioButton1.Text = list [0] .Item1;抛出异常错误 image of error

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

你可以随时拥有:

SqlCommand cmd = new SqlCommand(string.Format("SELECT item_name FROM TEST_ITEMS I JOIN TESTS T ON I.test_id = T.test_id WHERE test_name = '{0}'", txtTestName.Text), con);

其中txtTestName是用户将填写测试名称的TextBox。从用户体验的角度来看 - 这不是一个好方法。

  • 如果用户不知道测试名称怎么办?
  • 如果用户在测试名称中输入错误怎么办?

更好的想法是有一个搜索或至少一个DropDown(Combobox),你预先填充所有可用的测试。这样,用户就可以选择一个选择列表。

答案 1 :(得分:0)

TextBox输入测试名称

string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["key"].ConnectionString;
using (SqlConnection sqlConn = new SqlConnection(connStr))
{
    sqlConn.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT item_name FROM TEST_ITEMS I JOIN TESTS T ON I.test_id = T.test_id WHERE test_name = @testName", sqlConn))
    {
        cmd.Parameters.AddWithValue("testName", TextBox1.Text);

        DataTable dt = new DataTable();
        using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
        {
            adapter.Fill(dt);
        }

        // use dt as you did
    }
}

对于例外情况,我猜SELECT没有检索任何内容,请使用调试模式检查dt是否填充了您预期的数据。

顺便说一句,con定义在哪里?