首先,我想说这是我在编程过程中遇到的最精彩的论坛,我一直在谷歌钓鱼,寻求过去三个月我能得到的所有帮助。伟大的支持,甚至更大的风格 #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();
}
}
答案 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连接字符串。
此致
答案 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的标准配置。
当你在这里时,请改变你的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!有效!用户信息已保存到数据库中,应该去了!我一直习惯于期待我的代码失败,感觉就像看着我的第一枚火箭进入轨道一样。真棒。再次感谢大家,我希望这可以帮助处于类似情况的人。