请问,在我的程序中有这样一个功能:单击添加表,就在数据库中添加一个表,并且这个表的列是自定义的请问怎样把这个功能写成存储过程
我的意思此表的列是动态的。

解决方案 »

  1.   

    动态生成创建表的字符串,然后执行就可以了啊。cteate table xxx () ,用变量替换不就行了吗
      

  2.   

    自定义SQL语句,然后动态执行就行了。很多软件都是这么做的,SQL语句和存储过程是一样的。
      

  3.   

    通过Excel表动态创建表:      
          OleDbCommand cmd;
                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" +
                                 ExcelPath + ";Extended Properties='Excel 5.0;HDR=Yes'";
                OleDbConnection conn = new OleDbConnection(strConn);
                string sql;            sql = "select * from [sheet1$]";            cmd = new OleDbCommand(sql);
                cmd.Connection = conn;
                DataSet ds = new DataSet();
                OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                da.Fill(ds);            DateTime now = DateTime.Now;
                string NewTableName = "CacheTable" + RndNum(8);
                DataTable NewTable = new DataTable(NewTableName);
                string columnsName = string.Empty;
                sql = "Create Table " + NewTable + "(";
                for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
                {
                    sql += "  \"" + ds.Tables[0].Columns[i].ToString() + "\"  nvarchar(255) ,";
                    columnsName += ds.Tables[0].Columns[i].ToString() + ",";
                }
                if (ds.Tables[0].Columns.Count > 0)
                {
                    sql = sql.TrimEnd(",".ToCharArray());
                    columnsName = columnsName.TrimEnd(",".ToCharArray());
                }
                sql += ")";
                dbHelper.ExecuteNonQuery(ConfigurationManager.AppSettings["ConnectionString"], CommandType.Text, sql);
      

  4.   

    create proc sp_createTable(@sql varchar(4000)) 
    as
     exec(sql)
    go
      

  5.   


    string myExecuteQuery="create database test"; 
    SqlConnection mySqlConnection = new SqlConnection("server=MYSQLSERVER;user id=sa;password=abc;Trusted_Connection=yes;"); 
    SqlCommand myCommand = new SqlCommand(myExecuteQuery, mySqlConnection); 
    myCommand.Connection.Open(); 
    myCommand.ExecuteNonQuery(); 
    mySqlConnection.Close(); //上面是添加一个新的test数据库,同理你可以将"create database test"替换成其他SQL语句,实现其他的数据库操作。
      

  6.   

    用SQL语句创建表,添加表时执行SQL语句.
    自定义列既然是可变的列数,还是拼字符串吧.
    如果要使用存储过程,就一定要用SQL编写脚本,难度在于不固定列数.
    建议使用C#中的Command.Parameters执行存储过程.
    SQL语句为常量+变量.变量既是存储过程的参数
      

  7.   

    这样就ok了,把你生成表的sql 语句作为该存储过程的参数;我是经常这样做的,比如当查询条件很多的时候
      

  8.   

    你添加表的sql语句当成select语句执行就OK了,没甚麽其他特殊的地方
      

  9.   

    你可以在单击添加表的事件里先创建个数据库
    这个数据库只给一列可以自增的列.
    然后 数据库创建成功后
    给他三个文本框,一个是放列名的,一个是类型(建议类型用下拉列表),第三个是长度.
    然后他保存时,这一行增加.
    创建表的语句这样写
    例如:
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tableNameTest]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
    drop table [dbo].[tableNameTest]  
    gocreate table tableNameTest
    (
       --  列名 --
       table_id int Identity(1,1)
    )然后给他增加列的界面看.
    增加列的语句是
    alter table tableNameTest add columnName varchar(50)我没有找到适合的控间实现一次增加多列的功能,
    但是这种方法 至少可以每次增加一行.
    希望能帮到你