2011-03-28 46 views
1

首先,我想說,這是我在編程之旅中遇到的最輝煌的論壇,並且我一直在谷歌釣魚中獲得所有幫助得到最後三個月。巨大的支持,甚至更大的風格#法定符號徽章打開SQL連接插入文本框值的問題

足夠的奉承。

我正在做一個實踐項目,保險網站。現在,我需要從文本框中獲取用戶輸入到數據庫中。我在這裏看到很多相關的問題,但是我在其他任何帖子上都沒有找到有關我的連接的錯誤消息,而且我很無知,很難應用不完全符合我正在做。 (作爲一個方面說明,我的培訓師特別需要此代碼的最基本形式,並且因此告訴我不要擔心將查詢參數化爲安全性或使用try-catch塊來處理異常,但很多感謝這裏的答案對於這些指針)

我得到的錯誤信息是「由於啓動用戶實例的進程失敗而無法生成SQL Server的用戶實例,連接將被關閉。」

我的語法錯了嗎?我是否使用'TextBox1.Text'的值?我真的太笨了嗎?

using System; 
using System.Text; 
using System.Collections.Generic; 
using System.Linq; 
using System.Data; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class SubmissionPage : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     String connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\aspnetdb.mdf;Integrated Security=True;User Instance=True"; 
     SqlConnection sqlConn = new SqlConnection(connectionString); 

     sqlConn.Open(); 

     String thisQuery = "INSERT INTO Customer (" + " Name, SIC_NAIC, Address, City, State, Zip, " + ") VALUES (" + " @TextBox1.Text, @RadioButtonList1.SelecedItem, @TextBox2.Text, @DropDownList1.SelectedItem, @TextBox3.Text" + ")"; 
     SqlCommand thisCommand = new SqlCommand(thisQuery, sqlConn); 

     thisCommand.ExecuteNonQuery(); 
     sqlConn.Close(); 
    } 
} 
+0

你可以以web用戶的身份手動登錄到sql server並執行你正在嘗試的查詢嗎?你在那裏遇到錯誤嗎? – CtrlDot 2011-03-28 04:19:44

+0

您是否嘗試爲每個輸入值聲明變量,然後在查詢中使用它們?這些變量還可以幫助調試 – WorldIsRound 2011-03-28 04:21:11

+0

@WorldIsRound聲明輸入值的變量:看起來像這樣嗎? - > new var TextBox1.Text – 2011-03-28 04:30:50

回答

0

玉傢伙,首先我對我發現這裏的樂於助人不堪重負。我將成爲一個終身的計算器。感謝大家花時間和經驗幫助陌生人。沒有它,我不可能完成這件事。

我想發佈我最終使用的代碼,只是爲了記錄下實際爲我工作的情況,以防某些具有相同問題的人需要查看最終結果。根據@ yetanothercoder的建議,我把這個連接字符串放在我的webconfig文件中,它看起來像這樣(從?xml版本...到配置只是爲了顯示我放置代碼的位置,因爲我一直在想我自己,連接字符串標籤之間的包裹):

<?xml version="1.0"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=169433 
    --> 
<configuration> 
    <connectionStrings> 
    <add name="MyConnectionString" connectionString="Data Source=The-Crushinator\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ArgonautSubmission.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 

而且,雖然我的教練向我保證,建議使用塊@yetanothercoder應該沒事,這不是爲我工作,所以我用從@chaps的例子'回答,記得把TextBox4.Text的值忘了。代碼如下所示:

using System; 
using System.Text; 
using System.Collections.Generic; 
using System.Linq; 
using System.Data; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class SubmissionPage : System.Web.UI.Page 
{ 



    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 

     string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
     String thisQuery = "INSERT INTO Customer (Name, SIC_NAIC, Address, City, State, Zip) VALUES ('" + TextBox1.Text + "', '" + RadioButtonList1.SelectedItem.Text + "', '" + TextBox2.Text + "', '" + TextBox3.Text + "', '" + DropDownList1.SelectedItem.Text + "', '" + TextBox4.Text + "')"; 

     using (SqlConnection sqlConn = new SqlConnection(connectionString)) 
     { 
      sqlConn.Open(); 

      using (SqlCommand command = new SqlCommand(thisQuery, sqlConn)) 
      { 
       command.ExecuteNonQuery(); 
      } 
     } 
    } 
} 

接下來是更復雜的部分。爲了擺脫可怕的「由於啓動用戶實例的進程失敗而無法生成SQL Server的用戶實例。連接將被關閉」錯誤消息,我跟在@yetanother編碼器的this link, ,發現我需要安裝Sql Server Management Studio Express。我不得不使用Microsoft Web平臺安裝程序,因爲當我試圖按照msdn.com上的說明下載ssmse時,我不斷收到一個循環錯誤。我安裝SSMSE,開闢了「新查詢」按鈕查詢窗口,並執行此命令

exec sp_configure 'user instances enabled', 1. 

轉到 重新配置

然後我重新啓動SQL服務器,增加了一個新的數據庫,以我的asp.net項目和BAM!有效!用戶信息被保存到數據庫中,它應該去的地方!我一直很有條件地期待我的代碼失敗,因此感覺好像看着我的第一枚火箭將它送入軌道。真棒。再次感謝大家,我希望這可以幫助處於類似情況的人。

0

可能是由於權限問題,查eventlog。您可以嘗試從連接字符串中刪除User Instance = True

0

除了有關SQL數據庫實例的答案外,您的SQL查詢看起來不正確。嘗試將您的嵌入式查詢更改爲:

String thisQuery = "INSERT INTO Customer (Name, SIC_NAIC, Address, City, State, Zip) VALUES ('" + TextBox1.Text + "', '" + RadioButtonList1.SelecedItem.Text + "', '" + TextBox2.Text + "', '" + DropDownList1.SelectedItem.Text + "', '" + TextBox3.Text + "', '" + TextBoxZip.Text + "')"; 

這將根據表單中的值格式化SQL語句。

注意:假設字段SIC_NAIC國家正在存儲的文本值和其他字段郵編(TextBoxZip)。

+0

他正在做一個簡單的例子。他不想讓他的理解複雜化,因爲他提到不要擔心參數化查詢......此外,Siri在關於原始問題的評論中提到了這一點。 – 2011-03-28 05:04:09

+0

啊,是的@marc_s,但我在我的問題中提到,爲了追求對基本面的簡單把握,我的訓練師特別禁止我參加遊戲。 – 2011-03-28 05:04:27

+0

請給出答案,@yetanothercoder;直到我是一名15級的成員,我無法這樣做,並且這是值得的。 – 2011-03-28 05:43:21

0

首先,如果你的mdf駐留在App_Data,那麼你的連接字符串都是錯誤的。
將下面在你的web.config

<connectionStrings> 
    <add name="MyConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\aspnetdb.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

現在這樣稱呼它

string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 

這裏是你的錯誤修復。但是你應該安裝一個SQL Express實例,我認爲這對Visual Studio來說是標準的。

http://www.aspdotnetfaq.com/Faq/fix-error-Failed-to-generate-a-user-instance-of-SQL-Server-due-to-a-failure-in-starting-the-process-for-the-user-instance.aspx

而當你在它,請改變你的Button_Click事件這樣

protected void Button1_Click(object sender, EventArgs e) 
{ 

    string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
    string sql = "INSERT INTO Customer (Name, SIC_NAIC, Address, City, State, Zip) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}')"; 

    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     connection.Open(); 
     string query = String.Format(sql, 
      TextBox1.Text, 
      RadioButtonList1.SelectedItem.Text, 
      TextBox2.Text, 
      DropDownList1.SelectedItem.Text, 
      TextBox3.Text, 
      "000000"); 
     using (SqlCommand command = new SqlCommand(query, connection)) 
     { 
      command.ExecuteNonQuery(); 
     } 
    } 
} 

也請記住,你不能插入 RadioButtonList1.SelecedItem DropDownList1.SelectedItem 數據庫。您必須按照您的要求附加.Text.Value

+0

啊,謝謝。所以我的值「RadioButtonList1.SelectedItem」應改爲「RadioButtonList1.Value」或「RadioButtonList1.SelectedItem.Value」? – 2011-03-28 05:07:32

+0

是的。那是正確的。我已經添加了其他東西。試一試 – naveen 2011-03-28 05:15:00

+0

@myself:你在你的答案中明確表明了這一點。捂臉。 – 2011-03-28 05:21:16

2

檢查並使用SQL參數:

using (var conn = new SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=aspnetdb;Integrated Security=True;Connect Timeout=30;User Instance=True")) 
      { 

       conn.Open(); 
       using (var cmd = new SqlCommand("INSERT INTO Customer (Name,SIC_NAIC) VALUES (@Name,@SIC_NAIC)",conn)) 
       { 
        try 
        { 
         cmd.Parameters.Add("@Name", SQlDbType.VarChar, 50).Value = TextBox1.Text; 
         cmd.Parameters.Add("@SIC_NAIC", SQlDbType.VarChar, 50).Value = RadioButtonList1.SelecedItem.ToString(); 



         cmd.ExecuteNonQuery(); 


        } 
        catch (Exception) 
        { 
         { 
                 } 

         throw; 
        } 
        finally 
        { 
         if (conn.State == ConnectionState.Open) conn.Close(); 
        } 
       } 

確保你已經下載sqlmanagement Studio 2008速成..然後附上asp.netdb它,改變你的SQL的ConnectionString。

sql ms

問候

+0

我有一段時間試圖下載短信出於某種原因。出現問題的每一步。這在Windows 7中很常見嗎? – 2011-03-28 06:41:39

+0

是它的兼容...你將有更多的控制你的SQL服務器有短信.. – Crimsonland 2011-03-28 07:34:52