0

在数据库中创建一个带有客户名称的表(在 a 中输入TextBox)。创建的表的字段是ListBox. 喜欢:

com = new SqlCommand("CREATE TABLE " + Label6.Text + " (Locations nvarchar(20), " + ListBox3.Items[0].ToString().Trim() + " nvarchar(5))", con);
con.Open();
com.ExecuteNonQuery();
con.Close();

for (int i = 1; i <= ListBox3.Items.Count-1; i++)
{
    com = new SqlCommand("ALTER TABLE " + Label6.Text + " ADD " + ListBox3.Items[i].Text.Trim() + " nvarchar(5)", con);
    con.Open();
    com.ExecuteNonQuery();
    con.Close();
}

我正在使用GridView. 喜欢:

SqlCommand com = new SqlCommand("SELECT * FROM " + Label6.Text + "", con);
SqlDataAdapter da = new SqlDataAdapter(com);
DataTable dt = new DataTable();
da.Fill(dt);
GridView2.DataSource = dt;
GridView2.DataBind();

GridView 的 asp 代码是:

<Columns>
    <asp:CommandField ShowEditButton="True" />
</Columns>

因此,我希望第一列是只读的。我想编辑GridView和更新数据库中的客户(指 Label6.Text)表。注意:我希望 GridView 只接受整数。

我的数据库表和 Gridview 的图像显示在以下链接中。请帮忙。谢谢你。

在此处输入图像描述

4

2 回答 2

0

要仅接受数字输入,您可以使用 jQuery 插件。这里介绍了一些可能性。

com = new SqlCommand("ALTER TABLE " + Label6.Text + " ADD " + ListBox3.Items[i].Text.Trim() + " nvarchar(5)", con);

这种方法使您容易受到SQL 注入的攻击。通过构建这样的 SQL 语句,您的整个应用程序非常脆弱。

要更新数据库,您可以按照与从表中创建/选择的方式类似的方式工作。

于 2012-08-31T12:11:01.410 回答
0

首先,您应该重新考虑您的方法并更改所有 SQL 语句以使用 SQL 参数。现在您的代码极易受到 SQL 注入的攻击!这里有很多关于SO的示例,或者只是看看MSDN

此外,我认为让用户即时创建表和数据并不是一个好的决定。无论如何-如果您真的想以这种方式实现这一点,您可以动态添加列

for (int i = 0; i < dt.Columns.Count; i++)
{
    DataColumn dc = dt.Columns[i];
    BoundField bf = new BoundField();
    bf.ReadOnly = i == 0;  // will take care of setting controls to readonly in column 0
    bf.DataField = dc.ColumnName;
    GridView1.Columns.Add(bf);
}

不幸的是,添加一个只允许数字的列并不容易。在这种情况下,有必要动态创建一个 templateField 并将其添加到列中。看看这个例子

编辑

如果您尝试将值动态添加到表中,则应使用SQL 参数。(例如INSERT INTO tblXYZ (abc, def) values (@valueForABC, @valueForDEF)

不幸的是,现在不可能使用 SQL 参数来参数化 tableNamescolumNames。所以尝试

...将字符限制为 AZ、az、0-9、'.'、'_' 和 '' - 然后对数据库使用任何适当的括号(例如,我相信 SQL Server 的 [])来换行围绕整个事情。

显示在Jon Skeet的这个答案中。

于 2012-08-31T12:40:00.463 回答