无法打开SQL连接以插入文本框值

时间:2011-03-28 04:16:48

标签: c# asp.net sqlconnection

首先,我想说这是我在编程过程中遇到的最精彩的论坛,我一直在谷歌钓鱼,寻求过去三个月我能得到的所有帮助。伟大的支持,甚至更大的风格 #necromancer徽章

足够奉承。

我正在做一个练习项目,保险网站。现在,我需要将用户输入从文本框输入到数据库中。我在这里看到了很多相关的问题,但是我在连接上收到的错误信息我没有在任何其他帖子上找到,而且我很无知,很难应用不完全适合的例子我正在做。 (作为旁注,我的教练特别想要这个代码的最基本形式,因此告诉我不要担心参数化查询的安全性或使用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();
    }
}

6 个答案:

答案 0 :(得分: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 express ..然后在其上附加asp.netdb并更改您的sql连接字符串。

sql ms

此致

答案 1 :(得分:0)

此错误通常是由于父实例(无论出于何种原因)无法将系统数据库复制到用户本地隔离存储文件夹而导致的。有时是因为之前安装的SQL Express已将文件留在该目录中。全文在这里 http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/f5eb164d-9774-4864-ae05-cac99740949b

答案 2 :(得分:0)

可能是由于权限问题,检查事件日志。您可以尝试从连接字符串中删除User Instance = True

答案 3 :(得分: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 状态存储文本值以及 Zip (TextBoxZip)的附加字段。

答案 4 :(得分: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

答案 5 :(得分: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 Platform Installer,因为当我尝试按照msdn.com上的说明下载ssmse时,我不断遇到周期性错误。我安装了ssmse,用“新查询”按钮打开了查询窗口,并执行了这个命令

exec sp_configure 'user instances enabled', 1. 

转到 重新配置

然后我重新启动了sql server,为我的asp.net项目添加了一个新数据库,以及BAM!有效!用户信息已保存到数据库中,应该去了!我一直习惯于期待我的代码失败,感觉就像看着我的第一枚火箭进入轨道一样。真棒。再次感谢大家,我希望这可以帮助处于类似情况的人。