2012-05-28 65 views
0

我有以下功能:爲什麼ExecuteNonQuery()返回-1時沒有任何異常,也沒有在數據庫中插入條目?

public Exception createTopic(Topic t) 
{ 
    query = "insert into [DisData].[dbo].[discussions]([title],[description],[usrid],[dateadded],[desid],[likes],[shares],[visit],[replyto],[sno]) values(@title,@des,@uid,@dateadded,@did,@like,@share,@visit,@replyto,@sno)"; 
    try 
    { 
     com = new SqlCommand(query, con); 
     com.Parameters.AddWithValue("@title", t.getTitle()); 
     com.Parameters.AddWithValue("@des", t.getDescription()); 
     com.Parameters.AddWithValue("@uid", t.getUsrID()); 
     com.Parameters.AddWithValue("@dateadded", t.getDate()); 
     com.Parameters.AddWithValue("@did", t.getDesID()); 
     com.Parameters.AddWithValue("@like", 0); 
     com.Parameters.AddWithValue("@share", 0); 
     com.Parameters.AddWithValue("@visit", 0); 
     com.Parameters.AddWithValue("@replyto", t.getReplyToID()); 
     com.Parameters.AddWithValue("@sno", getDisCount() + 1); 
     con.Open(); 
     com.ExecuteNonQuery(); 
     con.Close(); 
     res.Redirect("viewthread.aspx?id=" + t.getDesID()); 
     return null; 
    } 
    catch (Exception e) 
    { 
     con.Close(); return e; 
    } 
} 

連接字符串在含有類的構造限定。問題是,每當我嘗試執行此函數時,它都會執行而不會發出任何異常,即使不在Visual Studio Debugger Console上,也不會使用用戶提供的新條目更新數據庫。當我檢查ExecuteNonQuery()的返回值時,它返回-1。對我來說,代碼似乎沒問題,或者可能是我錯過了一些東西。請幫助我確定它。

我還試圖通過刪除所有AddWithValue()語句,使查詢預先定義爲

插入件插入 [DisData]來執行查詢。[DBO] .discussions 值( '測試' 'TestDes', 'TestUID', '12-12-2012', 'sdsd',1,1,1, 'sdsd',2)

但是問題依舊......

+8

捕獲異常並將它們轉化爲函數的返回值似乎明顯奇怪。 –

+2

返回值-1意味着發生了回滾。 [SqlCommand.ExecuteNonQuery](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery) – Schaliasos

+0

您正在檢查哪個對象值? –

回答

0

如果你已經在代碼的某個地方開始了一個事務,你應該提交它使用Transaction.Commit()方法。 我也可以看到,您正在使用包含數據庫名稱的數據庫表的長名稱,這應該避免。檢查數據是否插入到DisData數據庫中,並且您正在另一個數據庫中搜索... :)

0

對於UPDATE,INSERT和DELETE語句,返回值是受命令影響的行數。當插入或更新的表上存在觸發器時,返回值包括受插入或更新操作以及觸發器或觸發器影響的行數影響的行數。對於所有其他類型的語句,返回值爲-1。如果發生回滾,返回值也是-1。

更多更詳細閱讀鏈接MSDN Link

相關問題