C# 为数据库添加表 请问,在我的程序中有这样一个功能:单击添加表,就在数据库中添加一个表,并且这个表的列是自定义的请问怎样把这个功能写成存储过程我的意思此表的列是动态的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 动态生成创建表的字符串,然后执行就可以了啊。cteate table xxx () ,用变量替换不就行了吗 自定义SQL语句,然后动态执行就行了。很多软件都是这么做的,SQL语句和存储过程是一样的。 通过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); create proc sp_createTable(@sql varchar(4000)) as exec(sql)go 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语句,实现其他的数据库操作。 用SQL语句创建表,添加表时执行SQL语句.自定义列既然是可变的列数,还是拼字符串吧.如果要使用存储过程,就一定要用SQL编写脚本,难度在于不固定列数.建议使用C#中的Command.Parameters执行存储过程.SQL语句为常量+变量.变量既是存储过程的参数 这样就ok了,把你生成表的sql 语句作为该存储过程的参数;我是经常这样做的,比如当查询条件很多的时候 你添加表的sql语句当成select语句执行就OK了,没甚麽其他特殊的地方 你可以在单击添加表的事件里先创建个数据库这个数据库只给一列可以自增的列.然后 数据库创建成功后给他三个文本框,一个是放列名的,一个是类型(建议类型用下拉列表),第三个是长度.然后他保存时,这一行增加.创建表的语句这样写例如: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)我没有找到适合的控间实现一次增加多列的功能,但是这种方法 至少可以每次增加一行.希望能帮到你 窗体中BackgroundImage属性中的图片文件删除后出错求助。 windows服务的2个问题 VS2008自带水晶报表打印问题 XML创建问题 [c#]请问switch语句中可以用正则表达式吗 怎么把自己写的控件加到工具箱里? 查询后,绑定控件没有同步显示 C#中对2个word文档进行比较遇到问题,求助 C# 输出窗口的控件或代码 关于与SQL数据库连接的问题. 急问:如何把文本文件(如:txt)的数据读取到Datagridview中去? 编码问题
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);
as
exec(sql)
go
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语句,实现其他的数据库操作。
自定义列既然是可变的列数,还是拼字符串吧.
如果要使用存储过程,就一定要用SQL编写脚本,难度在于不固定列数.
建议使用C#中的Command.Parameters执行存储过程.
SQL语句为常量+变量.变量既是存储过程的参数
这个数据库只给一列可以自增的列.
然后 数据库创建成功后
给他三个文本框,一个是放列名的,一个是类型(建议类型用下拉列表),第三个是长度.
然后他保存时,这一行增加.
创建表的语句这样写
例如:
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)我没有找到适合的控间实现一次增加多列的功能,
但是这种方法 至少可以每次增加一行.
希望能帮到你