2012-01-21 10 views
0

私の友人は助けが必要ですが、私は彼を助けることができないので。私はあなたの意見を聞くためにここを参照します。テーブルを作成する

彼はデータベースに新しいテーブルを作成したい(彼はvb.net、mysqlを使っている)。トリッキーなことは、入力から新しいテーブルの名前をテキストボックスにエンコードすることです。

これは可能ですか?テキストボックスの入力から新しいテーブルを作成し、名前を付けるには

あなたが私を助けてくれることを願っています。私の文法には申し訳ありません。

答えて

0

確かにできます。

基本的には、Create Tableステートメントを使用して文字列を作成して実行します。

ユーザーの入力から someSql "表の作成" + EditBox1.Text + "(.....)"

しかし

建物SQLは、SQLインジェクション攻撃にあなたを開きます。

法的識別子、特定の文字を使用すると、テーブルを持っていたら

は、どのようにコードがに、それを使用するつもりです...名前がすでに使用中である可能性があり、いくつかは、エスケープする必要があり、使用することはできませんデータベースに「MyTable」という名前のテーブルがあることを知っているのはなぜですか?

通常はテーブルの作成権限を渡すだけではありません。

何の依存関係(リレーション、保存されprocsの、contraintsなど)

これに対処するいくつかの方法があり、1はコードを、他のアプリでのテーブルの作成を行うルールを構築していることを何らかの形でメタ情報を格納することである程度テーブルを使用することができます。

さらに簡単なアプリケーションのもう1つは、テーブルにdb内の一意の名前を付けてから、ユーザーが入力した名前をエイリアスとして使用するため、Show( "MyTable")がShow( "UserTable1876 ")

テーブルが明確な共通構造を持っていて、それがユーザーのFredのコピーである場合は、別の列をテーブルに追加し、CRUD関数が使用されているときにFredのUserIDを追加するだけです。

だからそれはできますか?依存...

2

@njm "Create table <name>(field1,field2....)"のクエリを持つ1つの文字列変数を作成することができます。 上記のクエリは、入力テキストボックスで置き換える必要があります。

、独自のコネクションを持つmysqlコマンド変数にこの文字列を渡す... そして、単にこのクエリを実行...

1

このコードは動作するはずです....

に一つのボタンを追加します。テスト目的のフォームを作成し、そのクリックイベントに次のコードを挿入します。

Imports MySql.Data。'クラスの場所この.............
点心新MySqlConnectionに(myConnectionString)

としてmyConnectionString = My.Settings.MySQL_DBConnectionString
薄暗い詐欺' はmysqlclient

コードボタン...........

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 

は今.......

を試しに行きます
関連する問題