如何将dataset中的table导入数据库,前提是不知道该table的结构,而且数据库中也没有对应的表。 我在百度知道上也问了这个问题http://zhidao.baidu.com/question/74976374.html得到的答案好像是这样是做不到的,请高人给个明示。并将百度分一并给予。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 理论上应该可以,先判断dataset中的table各个字段的类型,然后根据得到结果创建表,再将数据导进数据库表里去。写起来很烦琐。。 我说一个比较笨的办法.先遍历Table的Columns获取列名手动写Sql语句创建表,完后开始遍历当前的Table开始Insert into; 数据库中没表,你又要导入数据库,那只能自己建表了先遍历table.columns,获取列名,数据类型,像string这样的类型你不知道长度,可以在创建表的时候设定一个比较安全的值,遍历table.columns获取表结构,然后创建建表的sql,建好表后再导入数据这个方法不是很理想就是了 谢谢min_jie 我也想过这样做。但还是希望能看到有种可以直接复制表到数据库的操作。您说是不是真的不可能?要是这样我就在想其它方法。 创建表大致如下DataTable table;StringBuilder sql = new StringBuilder();sql.AppendFormat(@"SET ANSI_NULLS ON;SET QUOTED_IDENTIFIER ON;CREATE TABLE [dbo].[{0}](", table.Name);for (int i = 0; i < table.Columns.Count; i++){ sql.AppendFormat("[{0}] {1} NULL", table.Columns[i].name, GetSqlType(table.Columns[i].DataType )); if (i < csvHead.Count - 1) { sql.Append(",\r\n"); }}sql.Append("\r\n);\r\n");// 执行sql.ToString()就可以创建这个表了// 我就用到这几个,其它你自己补充。string GetSqlType(Type t){switch (t.Name){ case "string": return "nvarchar(250)"; case "int": case "float": return t.Name; default: return "nvarchar(250)";};} 大量数据导入建议使用 SqlBulkCopy注意两点,1 数据库要是sql server,2原数据要用DataReader提供Database db = DatabaseFactory.CreateDatabase(m_connectKey);using (SqlConnection conn = (SqlConnection)db.CreateConnection()){ conn.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) { bulkCopy.DestinationTableName = m_tableName; //bulkCopy.NotifyAfter = 0; SetFullBulkColumnMappings(bulkCopy, csvHead.Count); // 清除数据/创建表等操作 cmd = new SqlCommand(sqlCommandText, conn); nResult = cmd.ExecuteNonQuery(); // 开始批量复制数据 bulkCopy.WriteToServer(reader); // 获得行数,做为插入数据的行数返回 nResult = reader.RecordsAffected; }//using (SqlBulkCopy}//using (SqlConnection/// <summary>/// 完全匹配设置BulkCopy的列映射/// </summary>/// <param name="bulkCopy"></param>/// <param name="sourceHead"></param>/// <param name="destinationHead"></param>public static void SetFullBulkColumnMappings(SqlBulkCopy bulkCopy, int columnCount){ for (int i = 0; i < columnCount; i++) { bulkCopy.ColumnMappings.Add(i, i); }} 谢谢greenery 看来是做过的。呵呵 winform问题 c#如何创建一个主窗体呢(即带有主菜单的窗体)? C# 去掉字符串中最后27个字符? 求算法:1G内存,大小1G的文本文件,1000个关键词,找出现次数最多的前个10词 WinFrom中DataGrid设置单元格背景色或者文本颜色? 求助 vs2005菜鸟问题,大哥们快来抢分吧 在ASP服务器端中调用webservice的方法会产生无法更新数据的问题 请问各位专家,点击Button_renew光标立即移动到TextBox_qymc上,如何实现?谢谢! 求一个正则,字符串 ADO.Net c#中如何吧棋盘、棋子的图片显示到界面上???
写起来很烦琐。。
DataTable table;StringBuilder sql = new StringBuilder();
sql.AppendFormat(@"SET ANSI_NULLS ON;
SET QUOTED_IDENTIFIER ON;
CREATE TABLE [dbo].[{0}](
", table.Name);for (int i = 0; i < table.Columns.Count; i++)
{
sql.AppendFormat("[{0}] {1} NULL", table.Columns[i].name, GetSqlType(table.Columns[i].DataType ));
if (i < csvHead.Count - 1)
{
sql.Append(",\r\n");
}
}
sql.Append("\r\n);\r\n");// 执行sql.ToString()就可以创建这个表了
// 我就用到这几个,其它你自己补充。
string GetSqlType(Type t)
{
switch (t.Name)
{
case "string":
return "nvarchar(250)";
case "int":
case "float":
return t.Name;
default:
return "nvarchar(250)";
};
}
注意两点,1 数据库要是sql server,2原数据要用DataReader提供Database db = DatabaseFactory.CreateDatabase(m_connectKey);
using (SqlConnection conn = (SqlConnection)db.CreateConnection())
{
conn.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
{
bulkCopy.DestinationTableName = m_tableName;
//bulkCopy.NotifyAfter = 0;
SetFullBulkColumnMappings(bulkCopy, csvHead.Count);
// 清除数据/创建表等操作
cmd = new SqlCommand(sqlCommandText, conn);
nResult = cmd.ExecuteNonQuery(); // 开始批量复制数据
bulkCopy.WriteToServer(reader);
// 获得行数,做为插入数据的行数返回
nResult = reader.RecordsAffected;
}//using (SqlBulkCopy
}//using (SqlConnection
/// <summary>
/// 完全匹配设置BulkCopy的列映射
/// </summary>
/// <param name="bulkCopy"></param>
/// <param name="sourceHead"></param>
/// <param name="destinationHead"></param>
public static void SetFullBulkColumnMappings(SqlBulkCopy bulkCopy, int columnCount)
{
for (int i = 0; i < columnCount; i++)
{
bulkCopy.ColumnMappings.Add(i, i);
}
}