2016-11-19 63 views
0

我有這個查詢,它給了我無法在表tbl_emp_gs上插入null的錯誤。我不知道我的代碼在這裏出了什麼問題。什麼是適當的查詢插入和選擇語句與Like子句?

con.Open(); 
sqc = con.CreateCommand(); 
string query1 = "INSERT INTO tbl_emp_gs (EmployeeID,StepID) VALUES ('"+ lblEmpID.Text +"', (Select StepID from tbl_gradestep where StepID Like @grade))"; 
sqc.Parameters.AddWithValue("@grade",cmbStepNumber.Text); 
sqc.CommandText = query1; 
sdr = sqc.ExecuteReader(); 
MessageBox.Show("Data Saved.", "Message",MessageBoxButtons.OK,MessageBoxIcon.Information); 

我想從tbl_gradestep表步驟ID,

+0

什麼是表結構? –

+0

tbl_gradestep 「StepID」 「GradeNumber」 「STEPNUMBER」 「SalaryGrade」 tbl_emp_gs 「StepID」 「僱員」 –

+0

確保@grade已經前綴%和後綴。否則,請在使用LIKE時手動追加它。 – Dhanasekar

回答

0

內部查詢將返回NULL。除非你有正當的理由來執行數據讀取器

string query1 = "INSERT INTO tbl_emp_gs (EmployeeID,StepID) VALUES ('"+ lblEmpID.Text +"', (Select StepID from tbl_gradestep where StepID Like @grade))"; 

sqc.Parameters.AddWithValue("@grade", "%" + cmbStepNumber.Text + "%"); 

我建議使用sqc.ExecuteNonQuery():你應遵循以獲取正確的結果(如果存在)like語法。

另外,不建議Concat的SQL語句中的字符串。

+0

仍NULL空白先生。 –

+0

@ James-DeanLorenzoAlimboyogue您確定您的數據庫中有符合該條件的數據嗎? – user3185569

+0

不,它沒有匹配,我應該把SalaryGrade放在沒有StepID的地方。 我的壞。 在SQL Server工作室嘗試它給了我零 然後我注意到它應該salarygrade不stepID 然後,它給我的StepID變爲SalaryGrade後。 謝謝你們。 –

0

您應該使用插入選擇,而不是一個值與選擇.. 這樣你執行插入只有在選擇工作,如果你有模式,然後在選擇行插入相同的行數

假設@grade是搜索模式

"INSERT INTO tbl_emp_gs (EmployeeID,StepID) 
SELECT ('"+ lblEmpID.Text +"', StepID 
from tbl_gradestep where StepID Like concat('%', @grade, '%'))" 
+0

CONCAT支持在MySQL 5.6+只有我猜 –

+0

@JonesJoseph CONCAT至少4.1的形式(是SQL ANSI 92標準)http://ftp.nchu.edu.tw/MySQL /doc/refman/4.1/en/string-functions.html – scaisEdge

+0

errro'''先生。 –

0
string query1 = "INSERT INTO tbl_emp_gs (EmployeeID,StepID) VALUES ('"+ lblEmpID.Text +"', (Select StepID from tbl_gradestep where StepID Like '%@grade%'))"; 
+0

直接使用像'%@ grade%' –

+0

是的。謝謝。 –

+0

U問題解決了@ james –