所以我一直在使用oledb创建一个Access表并将数据插入其中,但是当我试图插入的数据在某些字段中变成超过255个字符时,我最近碰到了一堵砖墙。这显然是不可能的。
在使用Excel执行相同类型的操作时,我在过去的程序中遇到了这个问题。我发现的解决方案是使用Microsoft.Office.Interop.Excel。这实际上使我的程序更短更简化,所以我想我也可以使用Access数据库。
唯一的问题是,这个引用几乎没有文档或示例代码,所以我不知道如何完成我的任务。有人可以为我提供一些示例代码,说明如何通常只使用Microsoft.Office.Interop.Access,或者更有帮助的是如何在现有数据库中创建表的示例代码,并用数据填充该表?
更新 这是我的oledb代码无效:
var cnnStr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};", Db);
var cnn = new OleDbConnection(cnnStr);
cnn.Open();
//make new access table
using (OleDbCommand command = new OleDbCommand())
{
command.Connection = cnn;
command.CommandText = String.Format("CREATE TABLE [{0}] ([Tag] string, [Text] string)", oldTable + "_combined");
try
{
command.ExecuteNonQuery();
}
catch
{
//table already exists, so delete it and remake it
command.CommandText = String.Format("DROP TABLE [{0}]", newTable + "_combined");
command.ExecuteNonQuery();
command.CommandText = String.Format("CREATE TABLE [{0}] ([Tag] string, [Text] string)", oldTable + "_combined");
command.ExecuteNonQuery();
}
}
//fill access table
using (OleDbCommand command = new OleDbCommand())
{
command.Connection = cnn;
command.CommandText = String.Format("INSERT INTO [{0}] (Tag, [Text]) VALUES (?, ?)", oldTable + "_combined");
command.Parameters.Add(new OleDbParameter("Tag", ""));
command.Parameters.Add(new OleDbParameter("Text", ""));
for (int i = 0; i < (comboText.Length - 1); i++)
{
command.Parameters["Tag"].Value = comboTag[i].Replace("\"", "");
comboText[i] = comboText[i].Replace("\r\n", "");
command.Parameters["Text"].Value = comboText[i].Replace("\"", "");
command.ExecuteNonQuery();
}
}
cnn.Close();
当我的代码到达comboText数组中的第19个元素时(此元素有273个字符),代码错误并在command.ExecuteNonQuery()上停止,并显示以下错误消息:&#34; OleDbException未处理:字段为太小,无法接受您尝试添加的数据量。尝试插入或粘贴较少的数据。&#34;
答案 0 :(得分:1)
所以我一直在使用oledb创建一个Access表并将数据插入其中,但是当我试图插入的数据在某些字段中变成超过255个字符时,我最近碰到了一堵砖墙。这显然是不可能的。
无意义。以下C#代码
static void Main(string[] args)
{
string myConnectionString =
@"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data Source=C:\Users\Public\Database1.accdb;";
using (var con = new OleDbConnection(myConnectionString))
{
con.Open();
using (var cmd = new OleDbCommand())
{
cmd.Connection = con;
cmd.CommandText =
"CREATE TABLE MemoTest (" +
"Id COUNTER PRIMARY KEY, " +
"MemoField MEMO " +
")";
cmd.ExecuteNonQuery();
string lorem =
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, " +
"sed do eiusmod tempor incididunt ut labore et dolore magna " +
"aliqua. Ut enim ad minim veniam, quis nostrud exercitation " +
"ullamco laboris nisi ut aliquip ex ea commodo consequat. " +
"Duis aute irure dolor in reprehenderit in voluptate velit " +
"esse cillum dolore eu fugiat nulla pariatur. Excepteur sint " +
"occaecat cupidatat non proident, sunt in culpa qui officia " +
"deserunt mollit anim id est laborum.";
cmd.CommandText = "INSERT INTO MemoTest (MemoField) VALUES (?)";
cmd.Parameters.AddWithValue("?", lorem);
cmd.ExecuteNonQuery();
Console.WriteLine(String.Format("Wrote {0} characters to memo field.", lorem.Length));
}
con.Close();
}
}
将以下内容输出到控制台
Wrote 446 characters to memo field.
当我在Access中打开表格时,我看到了: