【发布时间】:2018-04-08 00:57:30
【问题描述】:
我有一个 c# 程序可以更新我的访问数据库文件 (.mdb) 中的每个表中的 2 列。我要更新的列是短字符串类型,在更新之前我还将它们的大小更改为 255。我有 15 个文件,我的代码适用于前 7 个 dbs,并在第 8 个文件上崩溃。我分别更新每个代码,它在数据库中间崩溃了
System.Data.OleDb.OleDbException: '记录太大。'
正在崩溃的查询字符串: 更新 CARTE SET SYMBOLE = 'AGLX19.A8E', SYMBOLE2 = 'AWLX19.A8E;@P516.@PQ;@P517.@PQ;@P518.@PQ;@P519.@PQ' 其中代码 = '2862411';
private void UpdateSYMBOLEinDatabase(string tableName, string code)
{
if (symboleMdb[0] == "")
return;
string queryString = "UPDATE " + tableName +
" SET SYMBOLE = '" + symboleMdb[0] + "', SYMBOLE2 = '" + symboleMdb[1] + "' " +
"WHERE CODE = '" + code + "';";
if (symboleMdb[1] == "")
queryString = queryString.Replace(", SYMBOLE2 = ''", "");
using (OleDbConnection connectionInput = new OleDbConnection(connectionStringInput))
using (OleDbCommand command = new OleDbCommand(queryString, connectionInput))
{
connectionInput.Open();
command.ExecuteNonQuery();
command.Dispose();
}
}
我已经仔细检查了 sql 字符串(也在在线检查器中)。 我也在google上搜索过,发现这个错误,可能与我的db中的列太多有关,实际上当我打开db文件时,大约有220列。但是当我以编程方式计算列时,它显示大约有 878 列(在更改列中短字符串类型的长度之前/之后)。对于其他表格,它显示正确的计数。
我发现复制表可能会有所帮助。但实际上我也做不到。
private void CopyDeleteCopyDeleteQuery(string tableName)
{
string queryString = "CREATE TABLE " + tableName + "O"+
" AS (SELECT * FROM " + tableName +
" WHERE CODE='0801733');";
using (OleDbConnection connectionInput = new OleDbConnection(connectionStringInput))
using (OleDbCommand command = new OleDbCommand(queryString, connectionInput))
{
connectionInput.Open();
command.ExecuteNonQuery();
command.Dispose();
}
}
System.Data.OleDb.OleDbException: 'CREATE TABLE 语句中的语法错误。'
查询字符串: CREATE TABLE CARTEO AS (SELECT * FROM CARTE WHERE CODE='0801733');
【问题讨论】:
-
请尽量将您的问题限制在一个问题上。您复制表的语法不正确,MS Access 使用
SELECT ... INTO将查询复制到表,而不是CREATE TABLE AS SELECT