我对c#很陌生,我正在努力解决这个问题,
我正在尝试创建一个程序,可以使用SQL存储的产品将“items”发送到我在文本框中输入的名称。
我想循环文本框,所以当它循环时,它会从textBox1更改为textBox2等等。我想这样做,因为我有45个texBoxes,循环应该是好的我猜。
这是我尝试过的:
int x = 1;
while (x < 46)
{
cmd.CommandText = "EXECUTE usp_GiftItem @sendUser, @SendNickname, @receiver, @itemname, @text, @paymentType, @bOutput";
cmd.Parameters.Clear();
cmd.Parameters.Add("@SendUser", SqlDbType.VarChar).Value = "123";
cmd.Parameters.Add("@SendNickname", SqlDbType.VarChar, 50).Value = textBox89.Text;
cmd.Parameters.Add("@receiver", SqlDbType.VarChar, 50).Value = textbox(x).Text;
cmd.Parameters.Add("@itemname", SqlDbType.VarChar).Value = textBox80.Text;
cmd.Parameters.Add("@text", SqlDbType.VarChar, 1024).Value = textBox88.Text;
cmd.Parameters.Add("@paymentType", SqlDbType.VarChar).Value = "0";
cmd.Parameters.Add("@bOutput", SqlDbType.VarChar).Value = "1";
cn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Item sent", "Success");
cn.Close();
x++;
}
问题出在@recivers值
我希望你有一个解决方案。 谢谢,非常感谢
答案 0 :(得分:4)
TextBox[] textBoxes = new TextBox[] { textBox1, textBox2, ... };
while(x ...)
{
something[x] = textBoxes[x].Text;
}
答案 1 :(得分:1)
如果你先做一些准备,你可以简化一些事情。例如,您可以创建一个项目数组,其中item的索引是TextBox
个数字,而item本身就是一个用于生成粗体部分的对象:cmd.Parameters.Add(“@ blablabla “,type,num )。Value。
所以:
public class MyData
{
public string Text;
public SqlDbType Type;
public int Number;
public MyData(string text, SqlDbType type, int number = 0)
{
Text = text;
Type = type;
Number = number;
}
}
MyData[] data = new MyData[45] { new MyData("@bOutput", SqlDbType.VarChar), new MyData(...), ... };
TextBox[] control = new TextBox[45] {textBox1, textBox2, ... };
for(int i = 0; i < 45; i++)
cmd.Parameters.Add(data[i].Text, data[i].Type, data[i].Number).Value = control[i].Text;
还有一些事情需要改进,例如,您可能希望在表单(TextBox
)上找到它们,而不是枚举form1.Controls
。它不是生成数据[] - 而是TextBox.Tag
的一部分,您可以在其中解析它然后生成参数。 Number
的处理可以是可选的等等。
但这应该会给你一个想法。