大哥们呀! 关于把EXCEL文件的单引号插入数据库的问题!!

时间:2021-11-26 21:45:02
        private void button2_Click(object sender, EventArgs e)
        {   
            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("'","''") + "')
应该是这样的 插入进去了 谢谢了!

#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


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("'","''") + "')
应该是这样的 插入进去了 谢谢了!

#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表中设置一个主键(唯一索引),否则会出现数据导入不成功的提示。