我的朋友需要帮助,但因为我无法帮助他。我在这里提到你的意见。
他想在数据库中创建一个新表(他使用的是vb.net,mysql)。棘手的是,他想从被编码到文本框的输入中命名新表。
那可能吗?从文本框中的输入创建并命名新表。
希望你能帮助我。对不起我的语法。
@njm你可以创建一个查询“Create table <name>(field1,field2....)
”的字符串变量。在上面的查询必须用你的输入文本框替换。
并将此字符串传递给具有自己的连接的mysql命令变量...并简单地执行此查询...
这段代码应该工作....
在表单中添加一个按钮以进行测试,并将以下代码放入其click事件中
Imports MySql.Data.MySqlClient
'把它放在课堂上.............
Dim myConnectionString = My.Settings.MySQL_DBConnectionString
Dim con As New MySqlConnection(myConnectionString)
'按钮上的代码...........
Dim createSql As String
Try
con = New MySqlConnection(myConnectionString)
con.Open()
Dim tblname = "anyInputName"
createSql = "CREATE TABLE " & tblname & " (id INT(6) NOT NULL AUTO_INCREMENT,otherField TEXT NOT NULL,PRIMARY KEY (id));"
Dim cmd As New MySqlCommand(createSql, con)
cmd.ExecuteNonQuery()
cmd.Dispose()
Catch ex As Exception
MsgBox(ex.Message)
Finally
con.Close()
End Try
现在去试验.......
当然可以做到。
基本上,您在其中构建一个包含Create Table语句的字符串,然后执行它。
例如someSql“Create Table”+ EditBox1.Text +“(.....)”
但
从用户输入构建sql会打开你的sql注入攻击。
合法标识符,某些字符不能使用,有些必须转义,名称可能已经在使用中...
一旦你有了表,代码将如何使用它,知道数据库中有一个名为“MyTable”的表,为什么它在那里......
您通常不会分发创建表权限。
那些依赖关系(关系,存储过程,约束等)
有几种方法可以解决这个问题,一种方法是在另一个应用程序中创建表,构建规则并以某种方式存储元信息,代码可以使用它来使用表。
对于更简单的应用程序,另一个是在数据库中为表提供一些唯一的名称,然后使用用户输入的名称作为它的别名,因此Show(“MyTable”)被映射到Show(“UserTable1876”)
另一种可能性是如果表具有明确的通用结构,并且只是用户Fred的副本是向表中添加另一列,然后在使用任何CRUD函数时简单地添加Fred的UserID。
是的,它可以做到,是吗?要看....