C#,要往ACCESS数据库的表中增加记录,除了用INSERT INTO,还可以用什么方法.

tophqu 2006-03-01 11:24:07
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#里的库函数来插入,就不会有错误.但不知道怎么改.
请教各位~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...全文
455 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iSmalt 2006-03-04
  • 打赏
  • 举报
回复
根本上还不都是调用INSERT INTO,你自己得把参数输入的校验做好。
idda 2006-03-04
  • 打赏
  • 举报
回复
给你几个代码片断,你看看自己改吧:-),我是个比较懒惰的人,看见你那个组合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;



tophqu 2006-03-02
  • 打赏
  • 举报
回复
能不能直接改在我的代码上,然后发出来呢~~~~~~~~~~~~~~
PMsg 2006-03-01
  • 打赏
  • 举报
回复
SQL语句写的用问题
用Response.write(sql)打出来看看
idda 2006-03-01
  • 打赏
  • 举报
回复
DataTable.NewRow(),然后往row里填数据,最后更新数据库。

另外 可以用这种方式
OleDbCommand cmd=new OleDbCommand();
 
cmd.Parameters.Add(strParams[i],strValues[i]);
cmd.ExecuteNonQuery();
tophqu 2006-03-01
  • 打赏
  • 举报
回复
数据库为my.mdb
表名为my1
字段有:Author(s) Title Source Language Leuwords patterns Abstract Addresses Publisher Publisher Address
tophqu 2006-03-01
  • 打赏
  • 举报
回复
把源代码附上,可以直接改在上面.
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

----------------------------------------------------------------------------

----
oval 2006-03-01
  • 打赏
  • 举报
回复
建议有二:
1、在软件的输入框,对输入的数据进行合法检查,不符合要求的报错。
2、对于names[0]这类数据要输入数据库之前,要经过一个Check函数,对字符串中的单引号都替换成两个单引号。对双引号、大于号、小于号、逗号等也要进行处理。
李洪喜 2006-03-01
  • 打赏
  • 举报
回复
使用dataadpter
 更新数据集的方式也可以

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧