{
DataTable ds=new DataTable();
string conn = ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\che;Extended Properties=\"Excel 8.0;\"");
string comm = ("select * from [Sheet1$]");
OleDbDataAdapter adap = new OleDbDataAdapter(comm, conn);
adap.Fill(ds);
SqlConnection sqlconn = new SqlConnection("user id=fdc;password=123456;Database =msdb;data source=127.0.0.1;Connect Timeout=30");
SqlCommand sqlcomm = new SqlCommand();
sqlconn.Open();
try
{
sqlcomm.CommandText = "create table qqqq(a varchar(20),b varchar(20))";
sqlcomm.Connection = sqlconn;
sqlcomm.ExecuteNonQuery();
for (int i = 0; i < ds.Rows.Count; i++)
{
string a = ds.Rows[i][0].ToString();
string b = ds.Rows[i][1].ToString();
try
{
string sql = "insert into qqqq (a,b) values('" + a + "','" + b + "')";
sqlcomm.CommandText = sql;
sqlcomm.Connection = sqlconn;
int intcon = sqlcomm.ExecuteNonQuery();
if (intcon > 0)
MessageBox.Show("插入成功!");
}
catch (Exception ex)
{
MessageBox.Show("插入失败!由于:" + ex.Message);
}
}
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
大哥们看下我的代码 我的EXCEL文件有个 ed’ 这个单引号怎么用循环法插入到数据库中呢?别的数据循环都能插进数据库中, 就这行有单引号的数据不行。用循环插入的话也不好把单引号加2个 除了这个方法我是真不知道该怎么弄了。 而且原来的EXCEL文件不能改成ed’’ 只能有一个单引号的插入!
7 个解决方案
#1
string sql = "insert into qqqq (a,b) values('" + a.ToString().Replace("'","'') + "','" + b.ToString().Replace("'","'') + "')"; //这样就把单引号变成两个了,不就可以了。你试下。
#2
你为什么要插入单引号呢,我做的一个程序也是从Excel里面取数据,但是都是处理了不要单引号保存到数据库的
#3
不对呀 有错误呀 说的 字符文本中的字符太多! 还有常量中有换行符!
#4
用存储过程试试!
#5
插入进去了 但是 数据库中 的ed’变成了ed 要求的是在数据库中也是ed’不能改变数据呀!!
#6
OK了 谢谢了 在a.ToString().Replace("'","'') 逗号后面在加2个单引号就行了
('" + a.ToString().Replace("'","''") + "','"+ b.ToString().Replace("'","''") + "')
应该是这样的 插入进去了 谢谢了!
('" + a.ToString().Replace("'","''") + "','"+ b.ToString().Replace("'","''") + "')
应该是这样的 插入进去了 谢谢了!
#7
兄弟,这个问题我也遇到过,建议你不要用Insert()的方法,在用ToString()时就会变成纯字符串的形式,而它会与你的
"insert into qqqq (a,b) values('" + a + "','" + b + "')"中的单引号冲突,所以建议用SqlDataAdapter的Update()的方法来将Excel的数据导入到数据库。
简单的思路如下:
1、定义两个DataSet:ds_sql,ds_ole,分别用来存放Sql Server的数据表(qqqq)和从Excel得到的数据。
2、用OleDbDataAdapter得到Excel表格的所有数据,填充ds_ole。
3、用SqlDataAdapter来得到数据库中相应的表,也就是qqqq,用以下语句不用选择一条数据,而选择一个空数据行。
string sql = "select * from qqqq where 1=2";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
ds_sql = new DataSet();
da.Fill(ds);
SqlCommandBuilder scb = new SqlCommandBuilder(da);
4、将ds_ole中的数据内容拷贝到ds_sql(两个表的结构应该相同的)用DataTable.Copy()方法就可以了。
5、然后用da.Update(ds_sql.Tables[0])来完成数据的导入,就不会出现你说的单引号的问题了。
6、注意要在你的qqqq表中设置一个主键(唯一索引),否则会出现数据导入不成功的提示。
简单的思路如下:
1、定义两个DataSet:ds_sql,ds_ole,分别用来存放Sql Server的数据表(qqqq)和从Excel得到的数据。
2、用OleDbDataAdapter得到Excel表格的所有数据,填充ds_ole。
3、用SqlDataAdapter来得到数据库中相应的表,也就是qqqq,用以下语句不用选择一条数据,而选择一个空数据行。
string sql = "select * from qqqq where 1=2";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
ds_sql = new DataSet();
da.Fill(ds);
SqlCommandBuilder scb = new SqlCommandBuilder(da);
4、将ds_ole中的数据内容拷贝到ds_sql(两个表的结构应该相同的)用DataTable.Copy()方法就可以了。
5、然后用da.Update(ds_sql.Tables[0])来完成数据的导入,就不会出现你说的单引号的问题了。
6、注意要在你的qqqq表中设置一个主键(唯一索引),否则会出现数据导入不成功的提示。
#1
string sql = "insert into qqqq (a,b) values('" + a.ToString().Replace("'","'') + "','" + b.ToString().Replace("'","'') + "')"; //这样就把单引号变成两个了,不就可以了。你试下。
#2
你为什么要插入单引号呢,我做的一个程序也是从Excel里面取数据,但是都是处理了不要单引号保存到数据库的
#3
不对呀 有错误呀 说的 字符文本中的字符太多! 还有常量中有换行符!
#4
用存储过程试试!
#5
插入进去了 但是 数据库中 的ed’变成了ed 要求的是在数据库中也是ed’不能改变数据呀!!
#6
OK了 谢谢了 在a.ToString().Replace("'","'') 逗号后面在加2个单引号就行了
('" + a.ToString().Replace("'","''") + "','"+ b.ToString().Replace("'","''") + "')
应该是这样的 插入进去了 谢谢了!
('" + a.ToString().Replace("'","''") + "','"+ b.ToString().Replace("'","''") + "')
应该是这样的 插入进去了 谢谢了!
#7
兄弟,这个问题我也遇到过,建议你不要用Insert()的方法,在用ToString()时就会变成纯字符串的形式,而它会与你的
"insert into qqqq (a,b) values('" + a + "','" + b + "')"中的单引号冲突,所以建议用SqlDataAdapter的Update()的方法来将Excel的数据导入到数据库。
简单的思路如下:
1、定义两个DataSet:ds_sql,ds_ole,分别用来存放Sql Server的数据表(qqqq)和从Excel得到的数据。
2、用OleDbDataAdapter得到Excel表格的所有数据,填充ds_ole。
3、用SqlDataAdapter来得到数据库中相应的表,也就是qqqq,用以下语句不用选择一条数据,而选择一个空数据行。
string sql = "select * from qqqq where 1=2";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
ds_sql = new DataSet();
da.Fill(ds);
SqlCommandBuilder scb = new SqlCommandBuilder(da);
4、将ds_ole中的数据内容拷贝到ds_sql(两个表的结构应该相同的)用DataTable.Copy()方法就可以了。
5、然后用da.Update(ds_sql.Tables[0])来完成数据的导入,就不会出现你说的单引号的问题了。
6、注意要在你的qqqq表中设置一个主键(唯一索引),否则会出现数据导入不成功的提示。
简单的思路如下:
1、定义两个DataSet:ds_sql,ds_ole,分别用来存放Sql Server的数据表(qqqq)和从Excel得到的数据。
2、用OleDbDataAdapter得到Excel表格的所有数据,填充ds_ole。
3、用SqlDataAdapter来得到数据库中相应的表,也就是qqqq,用以下语句不用选择一条数据,而选择一个空数据行。
string sql = "select * from qqqq where 1=2";
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
ds_sql = new DataSet();
da.Fill(ds);
SqlCommandBuilder scb = new SqlCommandBuilder(da);
4、将ds_ole中的数据内容拷贝到ds_sql(两个表的结构应该相同的)用DataTable.Copy()方法就可以了。
5、然后用da.Update(ds_sql.Tables[0])来完成数据的导入,就不会出现你说的单引号的问题了。
6、注意要在你的qqqq表中设置一个主键(唯一索引),否则会出现数据导入不成功的提示。