2014-04-09 78 views
0

請幫助我在下面的語句中發現錯誤,其中僅從代碼中獲取錯誤。插入查詢時發生錯誤

CREATE TABLE語句

cmmd.CommandText = "CREATE TABLE Users([User_ID] AUTOINCREMENT PRIMARY KEY, UserName Text(50), UserPwdText(200), [IsActive] YesNo, [ModBy] Long REFERENCES Users (User_ID), [ModDate] Date)"; 
cmmd.ExecuteNonQuery(); 

在成功創建數據庫表。
我在這裏通過代碼插入值。

cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], [ModBy], 
      [ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 'true', '1', 
      'Datetime.Now.Date')"; 
cmmd.ExecuteNonQuery(); 

唯一的例外是

Data type mismatch in criteria expression

+0

請顯示出與它的變量 –

+1

有價值觀後2個括號 –

+1

@Nimesh什麼有混淆表?我認爲實際問題在於'IsActive'字段。 – Sanjeev4evr

回答

2

更新:

推薦的方法是使用參數。使用參數化查詢不僅可以解決SQL注入問題,還可以解決SQL Server日期本地化問題。

SqlCommand cmd = new SqlCommand(@"INSERT INTO Users ([UserName], [UserPwd], [IsActive], [ModBy], [ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 'true', '1', @dateValue)"); 
cmd.Parameters.AddWithValue("@dateValue", DateTime.Now.Date); 
....... 
// do same for the other. 

有價值觀後2個括號中的代碼

檢查:

string format = "yyyy-mm-dd"; //or with date yyyy-mm-dd hh:mm:ss 
cmmd.CommandText = string.Format(@"INSERT INTO Users ([UserName], [UserPwd], [IsActive], [ModBy], [ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 'true', '1', '{0}')", DateTime.Now.Date.ToString(format)); 

而且你應該使用的參數。

+0

我試過你的代碼。得到了這種特殊情況'標準表達式中的數據類型不匹配。' – Sanjeev4evr

+1

IsActive的類型是什麼?如果是你應該插入1或0,而不是「真」作爲字符串。 –

+0

是的,但是在Ms Access數據庫中它的數據類型是YesNo「 – Sanjeev4evr

2

你有一個錯字:

cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], [ModBy], [ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 'true', '1', 'Datetime.Now.Date')"; 

一個括號,而不是兩個。

+0

我試過你的代碼,但在標準表達式中出現錯誤'數據類型不匹配。' – Sanjeev4evr

+0

這將是由於你使用'DateTime.Now.Date',這意味着什麼訪問。試試'GETDATE()'或其他什麼。 –

2

隨着DateTime.Now.Date,你試圖獲得日期?

試試這個:

所有檢查的每個字段的數據類型的
cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], [ModBy], [ModDate]) VALUES ('Admin', 'kov1ozyKAjas8awoej3oijhrqoi6q=', 'true', '1', Datetime.Now.Date)"; 
cmmd.ExecuteNonQuery(); 
+0

是的,我試圖找到日期。 – Sanjeev4evr

5

第一。並確保您已按照表使用適當的數據類型。如果everythings確定,然後試試下面的查詢。

cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], 
      [ModBy],[ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 
      'true', '1', 'Datetime.Now.Date')"; 
cmmd.ExecuteNonQuery(); 
1

試試這個,datetime是一個字符串,如果你把雙引號或單引號放在裏面,那麼你需要查詢的樣子。

cmmd.CommandText = @"INSERT INTO Users ([UserName], [UserPwd], [IsActive], 
      [ModBy],[ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 
      'true', '1', '" + DateTime.Now.Date + "')"; 
        cmmd.ExecuteNonQuery(); 

我希望我的查詢不會返回任何錯誤。

4

查詢首先有兩個錯誤是雙括號,第二個錯誤是DateTime.Now.Date。它是一個.Net功能,你不能在字符串中執行它。在這裏,你不需要在字符串的開頭添加@。也改變'True' to Yes

試試這個

cmmd.CommandText = "INSERT INTO Users ([UserName], [UserPwd], [IsActive], 
      [ModBy],[ModDate])VALUES('Admin','kov1ozyKAjas8awoej3oijhrqoi6q=', 
      Yes, '1', Date())"; 
cmmd.ExecuteNonQuery(); 
+0

而不是'Yes'我​​用''0''。它的工作原理 – Sanjeev4evr

+2

基本上你的是/否字段在數據庫中存儲位(0/1)的值,所以你可以在查詢中使用是/否和0/1 – Shell

+0

是的它也有效,我現在應該做什麼,我點擊@ Mihai Hantea作爲回答。 – Sanjeev4evr