2016-10-31 10 views
1

Good Day Devs!C#でユーザー定義のテーブル名を作成する

私はユーザー定義のテーブル名を作成する方法を知りたいです。私は、3層アーキテクチャを使用します。 Form

BAL:

public void Purchase1(BELPurchase BELPur) 
    { 

     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = dbcon.getcon(); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = "CREATE TABLE [@Title] (VENDOR varchar(1000), ADDRESS varchar(1000), CONTROL_NO varchar(20), DATE date, TERMS varchar(20), QTY int, ITD varchar(1000), UP int, TP int, ALTOT int, REQUEST_BY varchar(500)) " + 
      "INSERT INTO [@Title] VALUES (@Vendor,@Address,@CtrlNo,@Date,@Terms,@Qty1,@ITD1,@UP1,@TP1,@ATT,@REQBY)";// lagay mo insert query mo 
     cmd.Parameters.AddWithValue("@Title1",BELPur.Title) 
     cmd.Parameters.AddWithValue("@Vendor", BELPur.Vendor); 
     cmd.Parameters.AddWithValue("@Address", BELPur.Address); 
     cmd.Parameters.AddWithValue("@CtrlNo", BELPur.CtrlNo); 
     cmd.Parameters.AddWithValue("@Date", BELPur.Date); 
     cmd.Parameters.AddWithValue("@Terms", BELPur.Terms); 
     cmd.Parameters.AddWithValue("@Qty1", BELPur.Qty1); 
     cmd.Parameters.AddWithValue("@ITD1", BELPur.ItD1); 
     cmd.Parameters.AddWithValue("@UP1", BELPur.UP1); 
     cmd.Parameters.AddWithValue("@TP1", BELPur.TP1); 
     cmd.Parameters.AddWithValue("@ATT", BELPur.AllTot); 
     cmd.Parameters.AddWithValue("@REQBY", BELPur.ReqBy); 
     cmd.ExecuteNonQuery(); 
    } 

DAL:

public class DBPurCon 
{ 
    public SqlConnection con = new SqlConnection("Data Source = DESKTOP-ANJELLO\\SQLEXPRESS; Initial Catalog = db_ADAPurchase; Persist Security Info = True; User Id = sa; Password = mm4;"); 

    public SqlConnection getcon() 
    { 
     if (con.State == System.Data.ConnectionState.Closed) 
      con.Open(); 
     else if (con.State == System.Data.ConnectionState.Open) 
      con.Close(); 
     return con; 
    } 

BEL:

public string Title { get; set; } 
    public string Vendor { get; set; } 
    public string Address { get; set; } 
    public string CtrlNo { get; set; } 
    public string Date { get; set; } 
    public string Terms { get; set; } 
    public string ReqBy { get; set; } 
    public string AllTot { get; set; } 

    public string Qty1 { get; set; } 
    public string ITD1 { get; set; } 
    public string UP1 { get; set; } 
    public string TP1 { get; set; } 

をシナリオ:コードは、タイトル型付きでという名前のテーブルを作成します。ユーザーによって。テーブルを作成したら、すべてのフィールドがタイトルで指定されたテーブルに挿入されます。 enter image description here ありがとうございました!一度にその1行が、これはしかし、更新に役立つことはありません場合

+0

質問または問題は何ですか? 1つのグローバル接続DBPurConを使用しないでください。これは悪い習慣です。接続プールはあなたの友人です。また、up1とtp1とおそらく他のものは、クラス内の文字列として定義されていますが、データベースにはintとして定義されています。それらをあなたのクラスのintとして定義しないでください。 – mybirthname

+0

あなたは一時テーブルを生成したいのですが、この一時テーブルにアイテムを追加する理由は何ですか?それはあなたがテーブル全体を生成し、データベースに一度に送信したいからですか? –

+0

おそらく、はいSir @HenrikBøgelundLavstsen.. C#はそれを行うことができますか? –

答えて

0

これは、1つのコマンドではなく2つのコマンドで実行できます。 1つのコマンドで実行できますが、コマンドにGOステートメントを指定できるようにするには、SQLServer SMOライブラリを使用する必要があります。

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = getcon(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = String.Format("CREATE TABLE [{0}] (VENDOR varchar(1000), ADDRESS varchar(1000), CONTROL_NO varchar(20), DATE date, TERMS varchar(20), QTY int, ITD varchar(1000), UP int, TP int, ALTOT int, REQUEST_BY varchar(500)) ", BELPur.Title); 

cmd.ExecuteNonQuery(); 

SqlCommand cmd2 = new SqlCommand(); 
cmd2.Connection = getcon(); 
cmd2.CommandType = CommandType.Text; 
cmd2.CommandText = String.Format("INSERT INTO [{0}] VALUES (@Vendor,@Address,@CtrlNo,@Date,@Terms,@Qty1,@ITD1,@UP1,@TP1,@ATT,@REQBY)", BELPur.Title); 
cmd2.Parameters.AddWithValue("@Vendor", BELPur.Vendor); 
cmd2.Parameters.AddWithValue("@Address", BELPur.Address); 
cmd2.Parameters.AddWithValue("@CtrlNo", BELPur.CtrlNo); 
cmd2.Parameters.AddWithValue("@Date", BELPur.Date); 
cmd2.Parameters.AddWithValue("@Terms", BELPur.Terms); 
cmd2.Parameters.AddWithValue("@Qty1", BELPur.Qty1); 
cmd2.Parameters.AddWithValue("@ITD1", BELPur.ItD1); 
cmd2.Parameters.AddWithValue("@UP1", BELPur.UP1); 
cmd2.Parameters.AddWithValue("@TP1", BELPur.TP1); 
cmd2.Parameters.AddWithValue("@ATT", BELPur.AllTot); 
cmd2.Parameters.AddWithValue("@REQBY", BELPur.ReqBy); 
cmd2.ExecuteNonQuery(); 

はまた、私は私がString.Formatを使用しましたので、あなたが変数としてこの方法を使用することはできませんので、テーブルの名前は、SQL Serverに渡されていることどのように変更しました。

より洗練された方法では、テーブルを作成し、パラメータから値を挿入するストアドプロシージャを作成する必要があります。

HenrikBøgelundLavstsenが言っているように、データベース設計は最適なものではないと私は思う。あなたが1kリクエスト=> 1kのテーブルをいつ持っているか考えてみましょう。

+0

Sir @ mihail-stancescuリクエストが1Kアップにならないと確信しています。ありがとうございます! :D –

0

あなたは、あなたがコードを少し必要とする、単に既存のテーブルに追加し、新しいテーブルを作成する必要はありません

public void Purchase1(BELPurchase BELPur) 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = dbcon.getcon(); 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "INSERT INTO Others VALUES (@Vendor,@Address,@CtrlNo,@Date,@Terms,@Qty1,@ITD1,@UP1,@TP1,@ATT,@REQBY)";// lagay mo insert query mo 
    cmd.Parameters.AddWithValue("@Title1",BELPur.Title) 
    cmd.Parameters.AddWithValue("@Vendor", BELPur.Vendor); 
    cmd.Parameters.AddWithValue("@Address", BELPur.Address); 
    cmd.Parameters.AddWithValue("@CtrlNo", BELPur.CtrlNo); 
    cmd.Parameters.AddWithValue("@Date", BELPur.Date); 
    cmd.Parameters.AddWithValue("@Terms", BELPur.Terms); 
    cmd.Parameters.AddWithValue("@Qty1", BELPur.Qty1); 
    cmd.Parameters.AddWithValue("@ITD1", BELPur.ItD1); 
    cmd.Parameters.AddWithValue("@UP1", BELPur.UP1); 
    cmd.Parameters.AddWithValue("@TP1", BELPur.TP1); 
    cmd.Parameters.AddWithValue("@ATT", BELPur.AllTot); 
    cmd.Parameters.AddWithValue("@REQBY", BELPur.ReqBy); 
    cmd.ExecuteNonQuery(); 
} 
コメントをもとに

が、私はあなたが最初にあなたのデータベース構造を再考すべきだと思う、あなたはそれに追加することができ、ここにあなたが使用できる構造の例である:

Basic structure of image

用テーブルの理由ベンダーと住所はe、私はあなたがドロップダウンを持っているので、そこからデータベース内の既存のものを選択し、アイテム間の関係を持つことができます。 これは話題になっていないので、特定のものに基づいて新しい質問を作成することを検討する必要があります。

+0

Sir @HenrikBøgelundLavstsen私のシステムは常に新しいテーブルを作成する必要があります要求。だから私は、テーブルを作成し、同時に作成されたテーブルに項目を挿入するコードを知りたいです。私を助けてくれてありがとう! –

+0

これは非常に優れたデータベース構造ではなく、データベースが互いに衝突する可能性があります。代わりに、リクエスト用のテーブルと、IDを要求する外部キーを持つリクエスト行用のテーブルを作成する必要があります。 –

関連する問題