0

我这里有情况。我还没有编写代码,因为我什至没有启动它的想法!我有 10 个文本框和一个按钮,所以当我只输入 3 个文本框时,我将只使用三个文本框,因为我解析到这些文本框的值会进入数据库。我打算在 for 循环中编写一个查询并执行它,以便只有具有值的文本框才能进入数据库。

for(int i=0;i<9;i++)
{
 string sql = "Insert Into exprmnt(docid,itemid,doctitle,itemcontent)values("+int.Parse(label6.Text)+","+i+",'"+label5.Text+"','"+textBox[i].Text+"')";

}
   OleDbCommand cmd = new OleDbCommand(sql,con);
  con.Open();

       cmd.ExecuteNonQuery();
  con.Close();

这是我想要发生的事情,如果我对某些 itemid 'i' 清空 'itemcontent' 没关系,当我保存所有文本框时会发生这种情况,包括那些没有键入任何文本的文本框。

4

4 回答 4

1

终于成功了!!!@yogi 谢谢!

有效的代码是

List<TextBox> textBoxList = new List<TextBox>();
          textBoxList.Add(new TextBox { Text = textBox1.Text });
          textBoxList.Add(new TextBox { Text = textBox2.Text });
          textBoxList.Add(new TextBox { Text = textBox3.Text });
          textBoxList.Add(new TextBox { Text = textBox4.Text });



          for (int n = 1; n<4; n++)
          {

              string sql = "Insert Into exprmnt (docid,itemid,doctitle,itemcontent) values(" + int.Parse(label6.Text) + "," + n + ",'" + label5.Text + "','" + textBoxList[n].Text+ "')";

              OleDbCommand cmd = new OleDbCommand(sql, connection);

              connection.Open();

              cmd.ExecuteNonQuery();
              connection.Close();
          } 
    } 
于 2012-07-28T10:51:34.977 回答
1

要遍历 textBox,您可以创建一个要循环遍历的 textBoxes 数组:

TextBox[] tbs = {textBox1, textBox2, textBox3}; //put all into this array
for(int i = 0; i<tbs.Length; i++)
{
    //use each textBox in here:
    string text = tbs[0].Text; //this is an example of how to get the Text property of each textBox from array
}
于 2012-07-28T07:16:42.473 回答
1

对于它的价值,您可以使用 Linq 查找填充的文本框。您对 SQL 注入开放。使用参数而不是字符串连接:

int docid = int.Parse(label6.Text);
String doctitle = label5.Text;
var filledTextBoxes = this.Controls
                             .OfType<TextBox>()
                             .Select((txt,i) => new { Textbox = txt, Index = i })
                             .Where(x => x.Textbox.Text.Length != 0);
if(filledTextBoxes.Any())
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        const String sql = "Insert Into exprmnt(docid,itemid,doctitle,itemcontent)values(@docid, @itemid, @doctitle, @itemcontent)";
        connection.Open();
        foreach(var txt in filledTextBoxes)
        {
            OledDbCommand cmd = new OledDbCommand(sql, connection);
            // Set the parameters.
            cmd.Parameters.Add(
                "@docid", OleDbType.Integer).Value = docid;
            cmd.Parameters.Add(
                "@doctitle", OleDbType.VarChar, 50).Value = doctitle;
            cmd.Parameters.Add(
                "@itemid", OleDbType.Integer).Value = txt.Index;
            cmd.Parameters.Add(
                "@itemcontent", OleDbType.VarChar, 100).Value = txt.Textbox.Text;
            try
            {
                int affectedRecords = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        } 
    } // The connection is automatically closed when the code exits the using block.
}

请注意,我已使用using-statement来确保连接被释放(关闭)。

于 2012-07-28T07:35:52.343 回答
0

将您的文本框控件添加到列表中。然后遍历列表。

List<TextBox> textBoxList = new List<TextBox>();

for (int i = 0; i < textBoxList.Count; i++) {
    // .. do your thing here, using textBoxList[i].Text for the value in the textbox
}

此外,正如 Tim Schmelter 指出的那样。在连接这样的查询时,您可以接受 SQL 注入。

于 2012-07-28T07:16:21.950 回答