我有一个c#程序,它在我的访问数据库文件(.mdb)的每个表中更新了2列。我更新的列是短字符串类型,我也在更新之前将它们的大小更改为255。我有15个文件,我的代码适用于前7个dbs,并且在第8个文件上崩溃。我正在分别更新每个代码,它在数据库中间崩溃
System.Data.OleDb.OleDbException:'记录太大。'
崩溃的查询字符串: UPDATE CARTE SET SYMBOLE =' AGLX19.A8E',SYMBOLE2 =' AWLX19.A8E; @ P516。@ PQ; @ P517。@ PQ; @ P518。@ PQ; @ P519。@ PQ&# 39;在哪里代码=' 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文件时,大约有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(从* CARTE中选择*代码=' 0801733');
答案 0 :(得分:0)
字段限制为2kB(不包括Memo和OLE。对于~220列字段,您可能会达到该限制。
您应该规范化表格,或将某些列转换为备注字段。