【问题标题】:select statement in C#C#中的选择语句
【发布时间】:2011-02-14 19:57:29
【问题描述】:

我的代码哪里出了问题?

string constr = "Provider=Microsoft.Jet.OLEDB.4.0;"
  + "Data Source=C:\\Users\\Simon\\Desktop\\test5\\test5\\test5\\save.mdb";

OleDbConnection conn = new OleDbConnection(constr);
string sql = "SELECT users.user_name,naziv,obroki_save.datum"
  + "FROM zivila JOIN obroki_save ON zivila.ID=obroki_save.ID_zivila"
  + "JOIN users ON obroki_save.ID_uporabnika=users.ID";
  OleDbCommand cmd = new OleDbCommand(sql, conn);
conn.Open();
OleDbDataReader reader;
reader = cmd.ExecuteReader();

while (reader.Read())
{
    Console.Write(reader.GetString(0).ToString() + " ,");
    Console.Write(reader.GetString(1).ToString() + " ,");
    Console.WriteLine("");
}

reader.Close();
conn.Close();

【问题讨论】:

  • @Simon:以后请注意您遇到的问题以及您的代码。
  • 您是在谈论可读性吗?硬编码代码错误的完整 SQL?或任何其他问题?换句话说,如果您说明您的具体需求,那么帮助您会容易得多:)
  • 它说它在 from clouse 所以我猜它是 sql 代码本身

标签: c# sql database ms-access join


【解决方案1】:

如果你在调试器中运行它,你可以看到问题:

SELECT users.user_name, naziv,obroki_save.datumFROM zivila JOIN obroki_save ...
                                             ^^^^

您的 SQL 中缺少空格。应该是这样的:

string sql = "SELECT users.user_name,naziv,obroki_save.datum " // << here
+ "FROM zivila JOIN obroki_save ON zivila.ID=obroki_save.ID_zivila " // << here
+ "JOIN users ON obroki_save.ID_uporabnika=users.ID";

【讨论】:

    【解决方案2】:

    这是 Access,所以你需要括号并且你需要选择一个 JOIN 类型。 LEFT 和 INNER 是通常的选择,所以:

    SELECT users.user_name,naziv,obroki_save.datum
    FROM (zivila 
    LEFT JOIN obroki_save ON zivila.ID=obroki_save.ID_zivila)
    LEFT JOIN users ON obroki_save.ID_uporabnika=users.ID
    

    【讨论】:

    • @Remou 现在我已经解决了这个问题,所以谢谢!但是这里有一个新问题发生在 while(reader.Read()){here's the wrong}-Specified cast is not valid.
    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2013-09-16
    • 2013-03-14
    相关资源
    最近更新 更多