C# 在类内使用oledb

C# 在类内使用oledb,c#,sql,class,oledb,C#,Sql,Class,Oledb,我有下面的代码,我得到这个错误: Troubleshooting Exceptions: System.Data.OleDb.OleDbException "syntax error" 我不知道我做错了什么。它应该从表中提取信息。我在整个项目中使用了相同的方法,就在这一点上,它给我带来了麻烦 class Codons { private bool start, end; private string codon1, codon3, triplet1, triplet2,

我有下面的代码,我得到这个错误:

Troubleshooting Exceptions: System.Data.OleDb.OleDbException "syntax error"
我不知道我做错了什么。它应该从表中提取信息。我在整个项目中使用了相同的方法,就在这一点上,它给我带来了麻烦

    class Codons
{
    private bool start, end;
    private string codon1, codon3, triplet1, triplet2, triplet3;
    private string triplet4, triplet5, triplet6, fullName;
    private OleDbConnection dataconnection;


    public Codons(string letter)
    {
        this.start = false;
        this.end = false;
        this.dataconnection = new OleDbConnection();
            this.dataconnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Projects_2012\\Project_Noam\\Access\\myProject.accdb";
            this.dataconnection.Open();


            string sql = "SELECT  tblCodons.codonsCodon3, " +
            "tblCodons.codonsTriplet1, tblCodons.codonsTriplet2, tblCodons.codonsTriplet3, " +
            "tblCodons.codonsTriplet4, tblCodons.codonsTriplet5, tblCodons.codonsTriplet6, " +
            "tblCodons.codonsFullName, tblCodons.codonsStart, tblCodons.codonsEnd"
            + " FROM tblCodons"
            + " WHERE tblCodons.codonsCodon1="+letter;

            OleDbCommand mycomm = new OleDbCommand(sql, dataconnection);
            OleDbDataReader dataReader = mycomm.ExecuteReader();
            dataReader.Read();
            this.codon1 = letter;
            this.codon3 = dataReader.GetString(0);
            this.triplet1 = dataReader.GetString(1);

            if (dataReader.IsDBNull(2))
                this.triplet2 = "     ";
            else
                this.triplet2 = dataReader.GetString(2);

            if (dataReader.IsDBNull(3))
                this.triplet3 = "     ";
            else
                this.triplet3 = dataReader.GetString(3);

            if (dataReader.IsDBNull(4))
                this.triplet4 = "     ";
            else
                this.triplet4 = dataReader.GetString(4);

            if (dataReader.IsDBNull(5))
                this.triplet5 = "     ";
            else
                this.triplet5 = dataReader.GetString(5);

            if (dataReader.IsDBNull(6))
                this.triplet6 = "     ";
            else
                this.triplet6 = dataReader.GetString(6);

            this.fullName = dataReader.GetString(7);
            this.start = dataReader.GetBoolean(8);
            this.end = dataReader.GetBoolean(9);
            dataReader.Close();

    }

由于您将SQL查询构建为字符串,我猜您在
字母
中有一些无效的SQL语法。一旦您将该值附加到查询中,就会导致您看到的语法错误


我想看看这篇关于我的帖子。这是向查询传递参数的正确方法,可以在应用程序中避免这种情况(以及其他明显的SQL注入攻击)。

由于您将SQL查询构建为字符串,我猜您在
字母中有一些无效的SQL语法。一旦您将该值附加到查询中,就会导致您看到的语法错误

我想看看这篇关于我的帖子。这是向查询传递参数的正确方法,可以避免应用程序中出现这种情况(以及其他明显的SQL注入攻击)。

此处:

+ " WHERE tblCodons.codonsCodon1="+letter
您正在创建一个如下所示的SQL子句

...WHERE tblCodons.codonsCodon1=A
这是无效的SQL。SQL中的字符串文本必须用property括起来,即

...WHERE tblCodons.codonsCodon1='A'
为此,您可以手动添加单引号,并确保正确转义字符串字母中的所有单引号(除非您需要处理)

(更好)您可以使用:

此外,您应该检查
dataReader.Read()
的返回值,而不仅仅是调用它:

if (!dataReader.Read()) {
     // replace this with more useful error reporting, maybe throwing an exception
     MessageBox.Show("No codon for this letter found.");
     return;
}
在这里:

您正在创建一个如下所示的SQL子句

...WHERE tblCodons.codonsCodon1=A
这是无效的SQL。SQL中的字符串文本必须用property括起来,即

...WHERE tblCodons.codonsCodon1='A'
为此,您可以手动添加单引号,并确保正确转义字符串字母中的所有单引号(除非您需要处理)

(更好)您可以使用:

此外,您应该检查
dataReader.Read()
的返回值,而不仅仅是调用它:

if (!dataReader.Read()) {
     // replace this with more useful error reporting, maybe throwing an exception
     MessageBox.Show("No codon for this letter found.");
     return;
}

可能是您输入的
字母的值不带引号。然后,它将
字母的内容作为函数处理。因为它找不到函数,所以抛出语法错误异常


尝试用引号(“字母”)关闭
字母
,可能是您输入了不带引号的
字母
的值。然后,它将
字母的内容作为函数处理。因为它找不到函数,所以抛出语法错误异常


尝试在引号(“字母”)中关闭
字母

我收到错误“行/列不存在数据”。我添加了以下内容:“mycomm.Parameters.AddWithValue(“tblCodons.codoncodon1”,字母);”我试过了,结果发现这个错误
行/列不存在数据我得到这个错误“行/列不存在数据”。我添加了这个错误:“mycomm.Parameters.AddWithValue”(“tblCodons.codoncodon1”,字母);”我试过了,结果发现这个错误
行/列不存在数据我尝试了它,得到了这个错误
行/列不存在数据。
我尝试了它,得到了这个错误
行/列不存在数据。