2013-05-14 123 views
4

我有一個頁面,您可以填寫一些信息,並根據該信息向數據庫插入新行。這裏是一個充滿形式的截圖:從asp.net中的表單插入表格

enter image description here

這裏是我的代碼,點擊提交按鈕,當插入到數據庫:

protected void CreateCourseButton_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(); 
    con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=University;Integrated Security=True;Pooling=False"; 

    string query1 = "insert into Courses(CRN,CourseName,StudyLevel,Capacity,Instructor,Credits,Prerequisite) values (" 
     + courseID.Text + "," + courseName.Text + "," + studyLevel.SelectedValue + "," + capacity.Text + "," + "Admin," + credits.Text + "," + prereq.Text + ")"; 



    SqlCommand cmd1 = new SqlCommand(query1, con); 
    con.Open(); 
    cmd1.ExecuteNonQuery(); 
    con.Close(); 
} 

的問題是,我得到以下錯誤,當我點擊提交:34

Server Error in '/Bannerweb' Application. 

Incorrect syntax near the keyword 'to'. 

Description: An unhandled exception occurred during the execution of the current web  
request. Please review the stack trace for more information about the error and where 
it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near the 
keyword 'to'. 

Source Error: 


Line 32:   SqlCommand cmd1 = new SqlCommand(query1, con); 
Line 33:   con.Open(); 
Line 34:   cmd1.ExecuteNonQuery(); 
Line 35:   con.Close(); 
Line 36:  } 

Source File: c:\Banner\Bannerweb\Pages\CreateCourse.aspx.cs Line: 34 

Stack Trace: 


[SqlException (0x80131904): Incorrect syntax near the keyword 'to'.] 
    System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean  
breakConnection) +2084930 
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean  
breakConnection) +5084668 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +234 
    System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, 
SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject 
stateObj) +2275 
    System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean 
async) +228 
    System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result,  
String methodName, Boolean sendToPipe) +326 
    System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +137 
    CreateCourse.CreateCourseButton_Click(Object sender, EventArgs e) in 
c:\Banner\Bannerweb\Pages\CreateCourse.aspx.cs:34 
    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118 
    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112 

線路是:

cmd1.ExecuteNonQuery(); 

任何人都可以幫我解決這個錯誤嗎?

感謝

+0

試着打印出'query1',你可以看到自己。提示:介意引號。 – 2013-05-14 10:58:36

+1

這是像你一樣的SQL查詢問題的一部分,你會遇到SQL查詢不完全匹配的情況。您應該使用參數化查詢並讓提供者爲您完成大部分工作。我會把你正在生成的查詢和你自己在數據庫上運行 - 你會看到問題在那裏。 – Arran 2013-05-14 10:58:36

+0

讓我看看'CreateCourse.aspx.cs'的'Line:34'頁面 – Rahul 2013-05-14 10:58:48

回答

0

修改您Insert查詢像

string query1 = "insert into Courses(CRN,CourseName,StudyLevel,Capacity,Instructor,Credits,Prerequisite) values (" 
     + courseID.Text + ",'" + courseName.Text + "'," + studyLevel.SelectedValue + "," + capacity.Text + "," + "Admin," + credits.Text + "," + prereq.Text + ")"; 

問題二

如果它是保存然後ExecuteNonQuery將返回1其他0,所以通過使用返回的值,你可以檢查並應用條件。

希望你能理解。

+0

謝謝,我解決了這個問題。我還有一個小問題:我想做類似的事情,如果(插入數據庫是成功的)做別的事情做另一件事。是否有像這樣的布爾函數來檢查? – yrazlik 2013-05-14 11:12:30

+0

你可以拿一個標籤來顯示成功/失敗的文本...... ** label1.Text =「成功插入」** – Sobhan 2013-05-14 11:16:03

+1

這段代碼嚴重受到sql注入的影響。避免通過字符串連接構建動態sql。如果可能,請使用sql參數。 – Alexander 2014-07-28 10:29:04

3

看起來你需要添加周圍​​報價。同樣使用SQL parameterized queries,所以你不容易受到SQL Injection的影響。

'" + courseName.Text + "' 

將評估爲:

'Intro to comp' 

http://johnhforrest.com/2010/10/parameterized-sql-queries-in-c/

+0

+1 ...發現很好... – 2013-05-14 11:04:04

+0

謝謝,我解決了這個問題。我還有一個小問題:我想做類似的事情,如果(插入數據庫是成功的)做別的事情做另一件事。是否有像這樣的布爾函數來檢查? – yrazlik 2013-05-14 11:10:56

+0

@bigO - ExecuteNonQuery()返回一個整數(受影響的行數)...你可以這樣做:'var results = cmd1.ExecuteNonQuery();'然後檢查'if results> 1' – 2013-05-14 11:14:36

1

你要通過所有的控制值內'更新您的SQL查詢是這樣的:

string query1 = "insert into 
Courses(CRN,CourseName,StudyLevel,Capacity,Instructor,Credits,Prerequisite) values ("+ 
"'" + courseID.Text + "'" + "," + "'" + courseName.Text + "'" + "," + 
"'" + studyLevel.SelectedValue + "'" + "," + "'" + capacity.Text + "'" + 
"," + "'Admin'," + "'" + credits.Text + "'" + "," + "'"+prereq.Text +"'" + ")"; 

//返回受查詢影響的行數

int a= cmd1.ExecuteNonQuery(); 
if(a>0) 
{ 
//inserted 
} 
else 
{ 
//not inserted 
} 

檢查here瞭解更多詳情。

+0

謝謝,我解決了這個問題。我還有一個小問題:我想做類似的事情,如果(插入數據庫是成功的)做其他事情做另一件事。是否有像這樣的布爾函數來檢查? – yrazlik 2013-05-14 11:13:24

5

發生此錯誤是因爲缺少插入值之間的''''。不管怎麼說最好的方法是使用Parameters收集這樣的:

string query1 = "insert into Courses(CRN,CourseName,StudyLevel,Capacity,Instructor,Credits,Prerequisite) values (@crn, @cursename, @studylevel, @capacity, @instructor, @credits, @prerequesite)"; 

SqlCommand cmd1 = new SqlCommand(query1, con); 
cmd1.Parameters.AddWithValue("@crn", courseID.Text); 
//add the rest 

con.Open(); 
cmd1.ExecuteNonQuery(); 
con.Close(); 
+0

謝謝,我解決了這個問題。我還有一個小問題:我想做類似的事情,如果(插入數據庫是成功的)做其他事情做另一件事。是否有像這樣的布爾函數來檢查? – yrazlik 2013-05-14 11:11:57

+0

'ExecuteNonQuery()'返回有多少行受到影響,所以如果它返回0意味着沒有行被插入。更多[這裏](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx) – gzaxx 2013-05-14 11:24:17

+0

這應該是正確的答案。 – gaurav 2017-10-19 08:00:38

1

這個錯誤可能是從Course name場,在那裏你必須在值空間來。只需修復它,您可以將TextBoxes的值包裝爲'字符。

但是,這是一個巨大的安全漏洞。如今,您必須使用參數,如您插入必須像:

SqlConnection con = new SqlConnection(); 
con.ConnectionString = "..."; 

string query1 = "insert into Courses(CRN,CourseName,StudyLevel,Capacity,Instructor,Credits,Prerequisite)"+ 
    " values (@CRN, @CourseName, ...)"; 



SqlCommand cmd1 = new SqlCommand(query1, con); 

// Insert parameters 
cmd1.Parameters.AddWithValue("@CRN",courseID.Text); 
... 

con.Open(); 
cmd1.ExecuteNonQuery(); 
con.Close(); 

您必須使用參數來保護自己免受SQL注入攻擊。

+0

謝謝,我解決了這個問題。我還有一個小問題:我想要做一些事情,如果(插入數據庫是成功的)做某件事,否則做另一件事。是否有像這樣的布爾函數來檢查? – yrazlik 2013-05-14 11:12:59

+0

@bigO我認爲你可以使用2件事。 ** 1 **是從[msdn](http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient)中使用'cmd1.ExecuteNonQuery'的返回值。sqlcommand.executenonquery.aspx):*對於... INSERT ...語句,返回值是受命令影響的行數。 ...對於所有其他類型的語句,返回值是-1。如果發生回滾,返回值也是-1。*。和** 2 **你可以捕捉任何異常做錯誤處理,如果這是你所需要的(但不要使用異常來控制正常執行流程) – oleksii 2013-05-14 11:23:10

1

試試這個

string query1 = "insert into Courses(CRN,CourseName,StudyLevel,Capacity,Instructor,Credits,Prerequisite) 
     values ('"+ courseID.Text +"','"+ courseName.Text + "','" + studyLevel.SelectedValue +"', '" + capacity.Text +"','" + "Admin" +"','"+credits.Text + "','" + prereq.Text +"') "; 

你的查詢語法是完全錯誤的。

0
protected void Button1_Click(object sender, EventArgs e) 
    { 
     SqlConnection conn = new SqlConnection("Data Source=D1-0221-37-393\\SQLEXPRESS;Initial Catalog=RSBY;User ID=sa;[email protected]"); 
     conn.Open(); 
     string EmployeeId = Convert.ToString(TextBox1.Text); 
     string EmployeeName = Convert.ToString(TextBox2.Text); 
     string EmployeeDepartment = Convert.ToString(DropDownList1.SelectedValue); 
     string EmployeeDesignation = Convert.ToString(DropDownList2.SelectedValue); 
     string DOB = Convert.ToString(TextBox3.Text); 
     string DOJ = Convert.ToString(TextBox4.Text); 
     SqlCommand cmd = new SqlCommand("insert into Employeemaster values('" + EmployeeId + "','" + EmployeeName + "','" + EmployeeDepartment + "','" + EmployeeDesignation + "','" + DOB + "','" + DOJ + "')", conn); 
     cmd.ExecuteNonQuery(); 

    } 
+0

我在這個 – Nitin 2015-10-26 06:24:24

+0

錯誤gettin錯誤 – Nitin 2015-10-26 06:24:41