2010-05-02 118 views
1

问题在我的代码中出现?在C#中选择语句#

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(); 
+1

@Simon:未来,请注意您遇到的问题以及您的代码。 – 2010-05-02 19:52:19

+1

你在说可读性吗?硬编码错误的完整SQL?或任何其他问题?换句话说,如果你陈述你的具体需求,它会更容易帮助你:) – 2010-05-02 20:22:01

+1

它是在它从clouse所以我认为它的sql代码本身 – simon 2010-05-02 20:50:28

回答

6

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

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"; 
+0

它仍然表示我在声明中出现错误 – simon 2010-05-02 20:26:53

+0

@simon:请您发布完整的错误消息吗? – 2010-05-02 20:29:14

+0

FROM子句中的语法错误。 – simon 2010-05-02 20:31:17

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 
+0

@Remou现在我已经过去了那个问题,所以谢谢你!但是在这里发生的一个新问题是(reader.Read()){这里是错误}行 - 指定的转换无效。 – simon 2010-05-02 21:22:58