首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用C#中的本地数据库使用Server执行SQL语句

如何使用C#中的本地数据库使用Server执行SQL语句
EN

Stack Overflow用户
提问于 2015-04-03 14:19:17
回答 1查看 81关注 0票数 0

我正在尝试将一条新记录插入到我设置的本地数据库的表(HistQuote)中。我正在使用Server创建和执行我的SQL语句。该表由8列组成:

  • 符号、数据类型: nchar(10)
  • 日期、数据类型:日期时间(8)
  • 打开,数据类型:数字(9)
  • 高,数据类型:数字(9)
  • 低,数据类型:数字(9)
  • 关闭,数据类型:数字(9)
  • Volumne,数据类型:数字(9)
  • AdjClose,数据类型:数字(9)

但是,当运行下面的代码时,我在行中得到以下错误

代码语言:javascript
运行
复制
sqlCeCommand.ExecuteNonQuery():

解析查询时出错。令牌行号= 1,令牌行偏移= 64,令牌错误=关闭

我不确定这是否是因为我的参数有不同的数据类型,而不是我的表或其他什么。

谢谢你的帮助。

代码语言:javascript
运行
复制
object[] objSQLArray = new object[8];

using (SqlCeConnection connection = new SqlCeConnection(Settings.Default.DataStorageConnectionString))
{ 
    for (int intCurrentQuote = 0; intCurrentQuote < this.clbStockSelect.CheckedItems.Count; ++intCurrentQuote)
    {
        for (int intCurrentDate = 0; intCurrentDate < Quotes[intCurrentQuote].HistStockDate.Count; ++intCurrentDate)
        {
            string strInsert = "INSERT INTO [HistQuote] ";
            string strColumns = "(Symbol, High, Low, Volumne, AdjClose, Close, Open, Date) ";
            string strValues = "VALUES (@Symbol, @High, @Low, @Volumne, @AdjClose, @Close, @Open, @Date)";

            objSQLArray[0] = this.Quotes[intCurrentQuote].HistSymbol;
            objSQLArray[7] = this.Quotes[intCurrentQuote].HistStockDate[intCurrentDate];
            objSQLArray[1] = this.Quotes[intCurrentQuote].HistOpen[intCurrentDate];
            objSQLArray[2] = this.Quotes[intCurrentQuote].HistHigh[intCurrentDate];
            objSQLArray[3] = this.Quotes[intCurrentQuote].HistLow[intCurrentDate];
            objSQLArray[4] = this.Quotes[intCurrentQuote].HistClose[intCurrentDate];
            objSQLArray[5] = this.Quotes[intCurrentQuote].HistVolume[intCurrentDate];
            objSQLArray[6] = this.Quotes[intCurrentQuote].HistAdjClose[intCurrentDate];

            using (SqlCeCommand sqlCeCommand = new SqlCeCommand(strInsert + strColumns + strValues, connection))
            {
                sqlCeCommand.Connection.Open();
                sqlCeCommand.Parameters.Clear();
                sqlCeCommand.Parameters.Add(new SqlCeParameter("@Symbol", SqlDbType.NChar));
                sqlCeCommand.Parameters.Add(new SqlCeParameter("@Date", SqlDbType.DateTime));
                sqlCeCommand.Parameters.Add(new SqlCeParameter("@Open", SqlDbType.Real));
                sqlCeCommand.Parameters.Add(new SqlCeParameter("@High", SqlDbType.Real));
                sqlCeCommand.Parameters.Add(new SqlCeParameter("@Low", SqlDbType.Real));
                sqlCeCommand.Parameters.Add(new SqlCeParameter("@Close", SqlDbType.Real));
                sqlCeCommand.Parameters.Add(new SqlCeParameter("@Volume", SqlDbType.Real));
                sqlCeCommand.Parameters.Add(new SqlCeParameter("@Adj_Close", SqlDbType.Real));

                sqlCeCommand.Parameters["@Symbol"].Size = 10;

                sqlCeCommand.Prepare();

                sqlCeCommand.Parameters["@Symbol"].Value = objSQLArray[0].ToString();
                sqlCeCommand.Parameters["@Date"].Value = objSQLArray[7];
                sqlCeCommand.Parameters["@Open"].Value = objSQLArray[1];
                sqlCeCommand.Parameters["@High"].Value = objSQLArray[2];
                sqlCeCommand.Parameters["@Low"].Value = objSQLArray[3];
                sqlCeCommand.Parameters["@Close"].Value = objSQLArray[4];
                sqlCeCommand.Parameters["@Volume"].Value = objSQLArray[5];
                sqlCeCommand.Parameters["@Adj_Close"].Value = objSQLArray[6];

                sqlCeCommand.ExecuteNonQuery();

                sqlCeCommand.Parameters.Clear();
            }
        }
    }

    connection.Close();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-03 16:40:53

打开和关闭都是保留字,请将列名括在sql statementin方括号中:

代码语言:javascript
运行
复制
[Close], [Open], [Date]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29433936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档