C# 插入Access SQL语句在C中不起作用

C# 插入Access SQL语句在C中不起作用,c#,sql,ms-access,C#,Sql,Ms Access,我有C程序。我的代码生成如下SQL语句: INSERT INTO [TWEET_RESULT] ([SearchKeyword], [TweetID], [RetweetCount], [URL], [Body], [PostedTime], [Sentiment]) VALUES ("BVN", "tag:search.twitter.com,2005:528481176659697664", "1", "http://twitter.com/austin_ebi/statuses/52848

我有C程序。我的代码生成如下SQL语句:

INSERT INTO [TWEET_RESULT] ([SearchKeyword], [TweetID], [RetweetCount], [URL], [Body], [PostedTime], [Sentiment])
VALUES ("BVN", "tag:search.twitter.com,2005:528481176659697664", "1", "http://twitter.com/austin_ebi/statuses/528481176659697664", "Pls what is BVN going to be used for? Why can't every Nigerian just have 1 National Insurance number to be used for all purposes?", "2014-11-01T09:38:25.000Z", "NEUTRAL")
当我在Access数据库中执行此SQL语句时,它通过正确插入记录来工作

但是,当我在C代码中运行相同的查询以插入记录时。它没有任何作用

我使用双引号括起字段值的原因是,某些字段值可能包含特殊字符。同一个查询,当只使用单引号括起字段值时,它以前工作过

当我检查C代码中的异常消息时。它说:

错误[42000][Microsoft][ODBC Microsoft Access驱动程序]不是有效名称。确保它不包含无效字符或标点符号,并且不太长


考虑一个参数化查询,它可以避免任何引用附件或转义的需要:

OdbcConnection conn = new OdbcConnection(connString);

String strSQL = "INSERT INTO [TWEET_RESULT] ([SearchKeyword], [TweetID], [RetweetCount], [URL], [Body], [PostedTime], [Sentiment]) " +
                "VALUES (?, ?, ?, ?, ?, ?, ?);"

OdbcCommand cmd = new OdbcCommand(strSQL, conn);
cmd.Parameters.Add("Search", OdbcType.Varchar).Value = "BVN";
cmd.Parameters.Add("TweetID", OdbcType.Varchar).Value = "tag:search.twitter.com,2005:528481176659697664";
cmd.Parameters.Add("Retweet", OdbcType.Varchar).Value = "1";
cmd.Parameters.Add("URL", OdbcType.Varchar).Value = "http://twitter.com/austin_ebi/statuses/528481176659697664";
cmd.Parameters.Add("Body", OdbcType.Varchar).Value = "Pls what is BVN going to be used for? Why can't every Nigerian just have 1 National Insurance number to be used for all purposes?";
cmd.Parameters.Add("PostedTime", OdbcType.Varchar).Value = "2014-11-01T09:38:25.000Z";
cmd.Parameters.Add("Sentiment", OdbcType.Varchar).Value = "NEUTRAL";

try
{
   conn.Open();

   Int affectedRows = cmd.ExecuteNonQuery();    
   Console.WriteLine("Affected Rows: {0}", affectedRows);
}
catch (Exception ex)
{
   Console.WriteLine(ex.Message);
}          

考虑一个参数化查询,它可以避免任何引用附件或转义的需要:

OdbcConnection conn = new OdbcConnection(connString);

String strSQL = "INSERT INTO [TWEET_RESULT] ([SearchKeyword], [TweetID], [RetweetCount], [URL], [Body], [PostedTime], [Sentiment]) " +
                "VALUES (?, ?, ?, ?, ?, ?, ?);"

OdbcCommand cmd = new OdbcCommand(strSQL, conn);
cmd.Parameters.Add("Search", OdbcType.Varchar).Value = "BVN";
cmd.Parameters.Add("TweetID", OdbcType.Varchar).Value = "tag:search.twitter.com,2005:528481176659697664";
cmd.Parameters.Add("Retweet", OdbcType.Varchar).Value = "1";
cmd.Parameters.Add("URL", OdbcType.Varchar).Value = "http://twitter.com/austin_ebi/statuses/528481176659697664";
cmd.Parameters.Add("Body", OdbcType.Varchar).Value = "Pls what is BVN going to be used for? Why can't every Nigerian just have 1 National Insurance number to be used for all purposes?";
cmd.Parameters.Add("PostedTime", OdbcType.Varchar).Value = "2014-11-01T09:38:25.000Z";
cmd.Parameters.Add("Sentiment", OdbcType.Varchar).Value = "NEUTRAL";

try
{
   conn.Open();

   Int affectedRows = cmd.ExecuteNonQuery();    
   Console.WriteLine("Affected Rows: {0}", affectedRows);
}
catch (Exception ex)
{
   Console.WriteLine(ex.Message);
}          


我不认为问题在于你的质疑。尝试一个简单的select查询,看看是否有效。从表中选择一条记录和一条记录,看看是否有效。对不起,我不明白你说的选择一条记录是什么意思。当我在Microsoft Access中运行insert sql语句时,它似乎可以工作。当我的C代码尝试执行相同的sql查询时,它遇到异常。如何将包含特殊字符(如\、逗号等)的字段值括起来。由于特殊字符,我不能使用单引号。如果我使用双引号,它会从C代码中爆炸出来。奇怪。我是说您已经向我们显示了您的插入查询,但错误与您的插入查询无关。即使你做了一个选择,它也会失败。首先尝试使用这个qry,然后检查它的查询问题或你的代码。插入到[TWEET_RESULT][SearchKeyword]、[TweetID]、[RetweetCount]、[URL]、[Body]、[PostedTime]、[Emotation]值BVN,test,1,test,test,test,test,2014-11-01T09:38:25.000Z,NEUTRALI Don thin这个问题就是你的查询。尝试一个简单的select查询,看看是否有效。从表中选择一条记录和一条记录,看看是否有效。对不起,我不明白你说的选择一条记录是什么意思。当我在Microsoft Access中运行insert sql语句时,它似乎可以工作。当我的C代码尝试执行相同的sql查询时,它遇到异常。如何将包含特殊字符(如\、逗号等)的字段值括起来。由于特殊字符,我不能使用单引号。如果我使用双引号,它会从C代码中爆炸出来。奇怪。我是说您已经向我们显示了您的插入查询,但错误与您的插入查询无关。即使你做了一个选择,它也会失败。首先尝试使用此qry,然后检查其查询问题或您的代码。插入[TWEET_RESULT][SearchKeyword]、[TweetID]、[RetweetCount]、[URL]、[Body]、[PostedTime]、[Emotation]值BVN、test、1、test、test、test、2014-11-01T09:38:25.000Z、NeutralTanks。我将使用参数化查询尝试此操作。我尝试了参数化查询,但出现了以下异常:错误[07002][Microsoft][ODBC Microsoft Access Driver]参数太少。预计7点。我验证了它是否像代码一样输入了7个值,但它显示的参数太少。似乎没有传递任何参数值。我不是一个C专家,我从一个教程网站上获取了这个。您使用的是带MS Access的OLEDB连接还是ODBC连接?可能不允许使用命名参数。请尝试仅在SQL语句中使用问号作为占位符,并删除@in.AddWithValue。我正在使用ODBC连接和Microsoft Access。我正在将@替换为?在我的问题中。现在获取异常:错误[07002][Microsoft][ODBC Microsoft Access驱动程序]参数太少。14.谢谢。我将使用参数化查询尝试此操作。我尝试了参数化查询,但出现了以下异常:错误[07002][Microsoft][ODBC Microsoft Access Driver]参数太少。预计7点。我验证了它是否像代码一样输入了7个值,但它显示的参数太少。似乎没有传递任何参数值。我不是一个C专家,我从一个教程网站上获取了这个。您使用的是带MS Access的OLEDB连接还是ODBC连接?可能不允许使用命名参数。请尝试仅在SQL语句中使用问号作为占位符,并删除@in.AddWithValue。我正在使用ODBC连接和Microsoft Access。我正在将@替换为?在我的问题中。现在获取异常:错误[07002][Microsoft][ODBC Microsoft Access驱动程序]参数太少。预计14日。