读书人

C#如何将CSV内容导入到SQL数据库中

发布时间: 2013-12-11 16:44:13 作者: rapoo

C#怎么将CSV内容导入到SQL数据库中


private void button1_Click(object sender, EventArgs e)
{
subImportCsv_Dataset("C:\\data\\", "AHU1_数据记录0.csv");
}
public void subImportCsv_Dataset(string filePath, string fileName)
{
string strConn = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=";
strConn += filePath;//这个地方只需要目录就可以了
strConn += ";Extensions=asc,csv,tab,txt;";
OdbcConnection objConn = new OdbcConnection(strConn);

try
{
string strSQL = "select * from " + fileName;//文件名,不要带目录
OdbcDataAdapter da = new OdbcDataAdapter(strSQL, objConn);
DataSet ds = new DataSet();
da.Fill(ds);

}
catch (Exception ex)
{
throw ex;
}
}

这是我自己写的读取CSV文件的程序但是要怎么插入数据到数据库中呢,数据库表中的列和CSV列是同结构的。
[解决办法]
bulk insert
[解决办法]
c#有读取CSV文件的功能
下面这个是我前几天些的一个函数:
  #region csv文件操作
public static DataSet dataset_csv(string sql,string fileurl)
{
OleDbConnection oleconn = new OleDbConnection();
OleDbCommand olecmd = new OleDbCommand();
OleDbDataAdapter oleadp;
DataSet csvdataset;
oleconn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+fileurl+";Extended Properties='Text;FMT=Delimited;HDR=YES;'";
using (oleadp = new OleDbDataAdapter(sql, oleconn))
{
using (csvdataset = new DataSet("csv"))
{
oleadp.Fill(csvdataset, "csvtable");
return csvdataset;
}
}
olecmd.Dispose();


oleconn.Close();
}
#endregion


[解决办法]
可以用SqlBulkCopy(using System.Data.SqlClient):

/// <summary>
/// 将DataTable导入SqlServer数据库
/// </summary>
/// <param name="dt">DataTable数据</param>
/// <param name="strIP">数据库ip</param>
/// <param name="strDatabase">数据库名</param>
/// <param name="strUserId">用户名</param>
/// <param name="strPwd">密码</param>
/// <param name="strTableName">要导入的表名</param>
/// <returns>错误信息(无错误返回空字符串)</returns>
public string DataTableToSqlServer(DataTable dt,string strIP,string strDatabase,string strUserId,string strPwd,string strTableName)
{
string strError = "";
SqlBulkCopy SqlBulk = new SqlBulkCopy("Data Source=" + strIP + ";Initial Catalog=" + strDatabase + ";User Id=" + strUserId + ";Password=" + strPwd + ";");
SqlBulk.DestinationTableName = strTableName;
try
{
SqlBulk.WriteToServer(dt);
}
catch(Exception ex)
{
strError = ex.Message + ":" + ex.StackTrace;
}
finally
{
SqlBulk.Close();
}
return strError;
}

DataTable中列的数据类型要和sqlserver中的列类型一一对应。
[解决办法]

private static bool csvToSql(string fileName)
{
string StrConn = "server=.;database='" + DataBaseName + "';uid='" + userName + "';pwd='" + Password + "'";

SqlConnection connection = new SqlConnection(StrConn);

try
{
connection.Open();

string cmdtxt = @"bulk insert " + TableName + " from '" + FilePath + fileName + "' with(FIRE_TRIGGERS,FIELDTERMINATOR=',')";

SqlCommand cmd = new SqlCommand(cmdtxt, connection);

cmd.ExecuteNonQuery();

return true;
}
catch (System.Exception ex)
{
// log.WriteLine("文件:{0} error:{1}", fileName, ex.Message);
// log.Flush();
return false;
}

}





[解决办法]
加断点先看看,你写的这个连接字符串是否正确。如果正确,然后看你写的这个
cmdtxt 是否正确,
bulk insert Table from 你的这个Table应该是要插入的表明
[解决办法]
public DataSet subImportCsv_Dataset(string filePath, string fileName)
{
string strConn = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=";
strConn += filePath;//这个地方只需要目录就可以了
strConn += ";Extensions=asc,csv,tab,txt;";
OdbcConnection objConn = new OdbcConnection(strConn);

try
{
string strSQL = "select * from " + fileName;//文件名,不要带目录
OdbcDataAdapter da = new OdbcDataAdapter(strSQL, objConn);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;

}
catch (Exception ex)
{
throw ex;
return null;
}
}


public int UpdateResult(DataSet ds)
{
int icount=0;
SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=
[解决办法]
DataDirectory
[解决办法]
\\Database1.mdf;Integrated Security=True;User Instance=True");
con.Open();
SqlCommand cmd = new SqlCommand(sql, con);
SqlParameter p = new SqlParameter("@VarName", SqlDbType.NVarChar);
cmd.Parameters.Add(p);
p = new SqlParameter("@TimeString", SqlDbType.NVarChar);
cmd.Parameters.Add(p);
p = new SqlParameter("@VarValue", SqlDbType.NVarChar);
cmd.Parameters.Add(p);
p = new SqlParameter("@Validity", SqlDbType.NVarChar);
cmd.Parameters.Add(p);
p = new SqlParameter("@Time_ms", SqlDbType.NVarChar);
cmd.Parameters.Add(p);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
cmd.Parameters["@VarName"].Value = ds.Tables[0].Rows[i]["VarName"].ToString();
cmd.Parameters["@TimeString"].Value = ds.Tables[0].Rows[i]["TimeString"].ToString();
cmd.Parameters["@VarValue"].Value = ds.Tables[0].Rows[i]["VarValue"].ToString();
cmd.Parameters["@Validity"].Value = ds.Tables[0].Rows[i]["Validity"].ToString();


cmd.Parameters["@Time_ms"].Value = ds.Tables[0].Rows[i]["Time_ms"].ToString();
conn.Open();
if(cmd.ExecuteNonQuery()>0)
icount++; cmd.Close();
}


打开关闭应该放在循环内做

读书人网 >C#

热点推荐