string strInsert = "INSERT INTO my1(["+names[0]+"])  VALUES  ('"+values[0]+"')";
names[0]是string数组的第一个值.,是my1表的字段名.
values[0]是string数组values的第一个值,是字段名的值;
问题就出在这句的VALUES部分.
当values的值含有单引号时,比如:JAMES'S SQUARE,就会出现错误:错误类型为:
语法错误 (操作符丢失) 在查询表达式 '' JAMES'S SQUARE',' 中。我知道可以用C#里的库函数来插入,就不会有错误.但不知道怎么改.
请教各位~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

解决方案 »

  1.   

    使用dataadpter
     更新数据集的方式也可以
      

  2.   

    建议有二:
    1、在软件的输入框,对输入的数据进行合法检查,不符合要求的报错。
    2、对于names[0]这类数据要输入数据库之前,要经过一个Check函数,对字符串中的单引号都替换成两个单引号。对双引号、大于号、小于号、逗号等也要进行处理。
      

  3.   

    把源代码附上,可以直接改在上面.
    using System.Data.OleDb ; 
    using System.IO;
    using System;
    //重复输出    record跳行原因,下一行的顺序出错  while 空 if  空
    public class FileClass 

    public static void Main() 

    string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\my.mdb" ; 
           OleDbConnection aConnection = new OleDbConnection ( strConnect ) ; //以字串为参数
    aConnection.Open ( ) ; 


    StreamReader SR;
    string Big; 
    SR=File.OpenText("c:\\ISI  的SSCI & AHCI 1975-1984年3020篇.txt"); 
    Big=SR.ReadLine(); 
    string [] names=new string[10] {"Author(s)","Title", "Source" ,"Language","Leuwords","patterns","Abstract","Addresses","Publisher","Publisher Address"};
    string [] values=new string[10]{"","","","","","","","","",""};
    int pos; while(Big!=null) 

    Console.WriteLine("处理中……");
    while(Big.IndexOf("Record")==0)
    {

    Big=SR.ReadLine(); 
    if(Big==null) break;
    while((Big.IndexOf("Record")!=0)&&(Big!=null))//&&
    {
    int j=Big.IndexOf(':');
    if(j>=0)
    {
    for(pos=0;pos<10;pos++)
    {
    if(Big.Substring(0,j)==names[pos])
    {
    values[pos]=Big.Substring(j+1);
    break;
    }

    }

    }

    Big=SR.ReadLine();
    if(Big==null) break; }

    string strInsert = "INSERT INTO my1(["+names[0]+"],["+names[1]+"],["+names[2]+"],["+names[3]+"],["+names[4]+"],["+names[5]+"],["+names[6]+"],["+names[7]+"],["+names[8]+"],["+names[9]+"])  VALUES  ('"+values[0]+"','"+values[1]+"','"+values[2]+"','"+values[3]+"','"+values[4]+"','"+values[5]+"','"+values[6]+"','"+values[7]+"','"+values[8]+"','"+values[9]+"')";
    OleDbCommand aCommand = new OleDbCommand ( strInsert,aConnection ) ; 
                               try 
       { 
       OleDbDataReader aReader = aCommand.ExecuteReader ( ) ;
       aReader.Close ( ) ;
       } 
       catch ( OleDbException e )
       {
      
       Console.WriteLine ( "错误类型为:");
       Console.WriteLine ( e.Errors[0].Message ) ;
       }
    if(Big==null) break;

    }

    Big=SR.ReadLine();
    if(Big!=null) break;

    }
    SR.Close();
    aConnection.Close();
    Console.WriteLine("提取完毕,按回车键退出");
    Console.Read();
    }
    }还有文本文件内容如下,就可以发现错误
    Record 1 of 500 
    Author(s): KETUDAT, S 
    Title: FRANCE'MANE
    Source: PROSPECTS, 14 (4): 523-530 1984 
    Language: English 
    Publisher: UNESCO 
    Publisher Address: 7 PLACE DE FONTENOY, 75700 PARIS Record 2 of 500 
    Author(s): TUAN, DT 
    Title: GREEN WINTERS ON THE RED-RIVER + CULTIVATION OF RICE IN VIETNAM AND THE WATER-FERN AZOLLA 
    Source: UNESCO COURIER, (12): 22-23 1984 
    Language: English 
    Reprint Address: TUAN, DT, VIETNAM AGR SCI INST,MINIST AGR,HANOI,VIETNAM. 
    Publisher: UNESCO 
    Publisher Address: 7 PLACE DE FONTENOY, 75700 PARIS, FRANCE --------------------------------------------------------------------------------
    Record 3 of 500 
    Author(s): VALLIBHOTAMA, S 
    Title: A CITY BUILT ON RICE SUKHOTHAI,THAILAND, 13TH-CENTURY CRADLE OF THAI CIVILIZATION 
    Source: UNESCO COURIER, (12): 26-27 1984 
    Language: English 
    Reprint Address: VALLIBHOTAMA, S, SILPAKON UNIV,BANGKOK,THAILAND. 
    Publisher: UNESCO 
    Publisher Address: 7 PLACE DE FONTENOY, 75700 PARIS, FRANCE --------------------------------------------------------------------------------
    Record 4 of 500 
    Author(s): KLING, Z 
    Title: THE SOUL OF A PEOPLE + THE ROLES AND IMPORTANCE OF RICE IN MALAYSIA 
    Source: UNESCO COURIER, (12): 32-33 1984 
    Language: English 
    Reprint Address: KLING, Z, UNIV MALAYA,DEPT SOCIOL & ANTHROPOL,KUALA LUMPUR 2211,MALAYSIA. 
    Publisher: UNESCO 
    Publisher Address: 7 PLACE DE FONTENOY, 75700 PARIS, FRANCE --------------------------------------------------------------------------------
    Record 5 of 500 
    Author(s): MURRAY, P 
    Title: STYLE AND REGIONALISM IN MALAYSIA 
    Source: RIBA JOURNAL-ROYAL INSTITUTE OF BRITISH ARCHITECTS, 91 (11): 40-45 1984 
    Language: English 
    Publisher: ROYAL INST BRIT ARCHITECTS 
    Publisher Address: 66 PORTLAND PL, LONDON, ENGLAND W1N 4AD --------------------------------------------------------------------------------
      

  4.   

    数据库为my.mdb
    表名为my1
    字段有:Author(s) Title Source Language Leuwords patterns Abstract Addresses Publisher Publisher Address
      

  5.   

    DataTable.NewRow(),然后往row里填数据,最后更新数据库。另外 可以用这种方式
    OleDbCommand cmd=new OleDbCommand(); 
     
    cmd.Parameters.Add(strParams[i],strValues[i]); 
    cmd.ExecuteNonQuery();
      

  6.   

    SQL语句写的用问题
    用Response.write(sql)打出来看看
      

  7.   

    给你几个代码片断,你看看自己改吧:-),我是个比较懒惰的人,看见你那个组合sql语句就没有改的欲望了,呵呵,开玩笑了:)newRow
    SqlDataAdapter adapter=new SqlDataAdapter("select * from titles",
    "server=localhost;database=pubs;uid=sa;pwd=");
    SqlCommandBuilder builder=new SqlCommandBuilder(adapter);
    DataSet ds=new DataSet();
    adapter.Fill(ds,"Titles"); DataTable table=ds.Tables["Titles"];
    DataRow row=table.NewRow();//创建新行
    row["title_id"]="JP1001";
    row["title"]="Programming Microsoft .NET";
    row["price"]="59.99";
    row["ytd_sales"]="1000000";
    row["type"]="business";
    row["pubdate"]="2004-2-10";
    table.Rows.Add(row);//增加行
    adapter.Update(ds,"Titles");
    Console.WriteLine("OK");OleDbDataAdapter da = new OleDbDataAdapter();
      OleDbCommand cmd;  // Create the SelectCommand.  cmd = new OleDbCommand("SELECT * FROM Customers " +
                           "WHERE Country = @Country AND City = @City", conn);  cmd.Parameters.Add("@Country", OleDbType.VarChar, 15);
      cmd.Parameters.Add("@City", OleDbType.VarChar, 15);  da.SelectCommand = cmd;  // Create the InsertCommand.  cmd = new OleDbCommand("INSERT INTO Customers (CustomerID, CompanyName) " +
                           "VALUES (@CustomerID, @CompanyName)", conn);  cmd.Parameters.Add("@CustomerID", OleDbType.Char, 5, "CustomerID");
      cmd.Parameters.Add("@CompanyName", OleDbType.VarChar, 40, "CompanyName");  da.InsertCommand = cmd;  
      

  8.   

    根本上还不都是调用INSERT INTO,你自己得把参数输入的校验做好。