我正在创建一个测试,根据用户需要进行的测试填充单选按钮。
测试由管理员在表格中创建。我们目前已经设置了一个收藏颜色表,但是我希望能够在未来验证我们的代码,以便可以选择其他测试。下面是我的代码,但它很快完成,因此在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
任何帮助都将不胜感激。
答案 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
定义在哪里?