【发布时间】:2021-12-12 20:16:53
【问题描述】:
我想提出申请。我希望代码在表格中创建与我在文本框中键入的列数一样多的列。我在应用程序中的主要目的是编写一个标题(如表格)并添加尽可能多的字幕(列)。但我只能通过结合系统代码来添加列。我只能通过更改下面的代码来添加列,但我想要的是在表单上创建一个文本框并添加与那里写的数字一样多的列。
`private void button1_Click(object sender, EventArgs e)
{
string s1, s2;
s1 = textBox2.Text;
s2 = "char(20)";
try
{
baglanti.Open();
SqlCommand komut = new SqlCommand("Create Table " + textBox1.Text + " ( " + s1 + " " + s2 + " ) ", baglanti);
komut.ExecuteNonQuery();
baglanti.Close();
MessageBox.Show("Succes");
}
catch (Exception)
{
MessageBox.Show("Error");
}
}
}`
【问题讨论】:
-
那么您的问题是什么?虽然这里真正的 问题是代码中存在巨大的安全漏洞。您正在将未经处理的值注入您的 RDBMS。
-
不想刻薄,但您确定您不是只是在寻找 Excel 工作簿,或者可能是 NoSQL 文档存储? RDBMS 系统不能很好地处理任意表结构,安全地构建动态 SQL 是一种痛苦。
-
如果有人输入
t(i int); CREATE LOGIN NewSA WITH PASSWORD = 'a', CHECK_POLICY = OFF; ALTER SERVER ROLE sysadmin ADD MEMBER NewSA;--作为他们的表的“名称”,你认为会发生什么? -
要实现这一点,您必须将 sqlstatement 字符串写入 for 循环中,该循环的迭代次数与文本框中的数字一样多。这应该很简单,所以不清楚你到底卡在哪里。我同意其他人的观点 1) 这感觉像是解决你不应该遇到的问题的解决方案(很少有充分的理由来动态处理数据库对象) 2) 即使写得很好,这也可能会引发 sql 注入攻击洞。
-
那么,您正在重新发明 SSMS?
标签: c# sql sql-server