我在百度知道上也问了这个问题http://zhidao.baidu.com/question/74976374.html
得到的答案好像是这样是做不到的,请高人给个明示。并将百度分一并给予。

解决方案 »

  1.   

    理论上应该可以,先判断dataset中的table各个字段的类型,然后根据得到结果创建表,再将数据导进数据库表里去。
    写起来很烦琐。。
      

  2.   

    我说一个比较笨的办法.先遍历Table的Columns获取列名手动写Sql语句创建表,完后开始遍历当前的Table开始Insert into;
      

  3.   

    数据库中没表,你又要导入数据库,那只能自己建表了先遍历table.columns,获取列名,数据类型,像string这样的类型你不知道长度,可以在创建表的时候设定一个比较安全的值,遍历table.columns获取表结构,然后创建建表的sql,建好表后再导入数据这个方法不是很理想就是了
      

  4.   

    谢谢min_jie   我也想过这样做。但还是希望能看到有种可以直接复制表到数据库的操作。您说是不是真的不可能?要是这样我就在想其它方法。
      

  5.   

    创建表大致如下
    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)";
    };
    }
      

  6.   

    大量数据导入建议使用 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);
    }
    }
      

  7.   

    谢谢greenery  看来是做过的。呵呵