在C#MSSQL中创建用户定义的表名

时间:2016-10-31 07:44:56

标签: c# sql-server

Good Day Devs!

我想知道如何创建用户定义的表名。我使用3层架构: Form

BAL:

    pi@raspberrypi:~/Desktop/gitrepos/Othello-tictactoe $ emcc -O2 main.bc OthelloBoard.bc OthelloMove.bc OthelloView.bc TicTacToeBoard.bc TicTacToeMove.bc TicTacToeView.bc -o project.js
    Exception in thread Thread-3:
    Traceback (most recent call last):
    File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
    File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
    File "/usr/lib/python2.7/multiprocessing/pool.py", line 380, in _handle_results
    task = get()
    TypeError: ('__init__() takes at least 3 arguments (1 given)', <class
    'subprocess.CalledProcessError'>, ())

DAL:

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();
    }

BEL

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;
    }

场景:代码将创建由用户键入的Title命名的表。创建表后,所有字段现在将插入到标题所指定的表中。 enter image description here 感谢你们对我的帮助!

2 个答案:

答案 0 :(得分:0)

你不需要创建一个新表,只需添加到现有表中,如果当时只有1行,这对于更新没有帮助,那么你需要一点代码,

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

供应商和地址表的原因是因为在你的immage中,我看到你有一个下拉列表,所以你可以从中选择一个现有的数据库,并且只是在项目之间有关系。 然而,这已经偏离主题,因此您应该考虑根据具体内容创建新问题。

答案 1 :(得分:0)

您可以在两个命令中执行此操作,而不是在单个命令中执行此操作。它可以在单个命令中完成,但您必须使用SQLServer SMO库才能在命令中指定GO语句。

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();

此外,我已经更改了传递给SQL Server的表的名称,因为您不能以此方式将其用作变量,因此我使用了String.Format

我认为,更简洁的方法是,您必须创建一个存储过程来创建表并从参数中插入值。

正如HenrikBøgelundLavstsen所说,我认为数据库设计并不是最佳选择。考虑何时有1k请求=&gt; 1k表。