存储过程(Visual Studio ASP.Net 2005 C#)

时间:2011-02-17 12:39:45

标签: c# sqlconnection sqlcommand

我创建了一个名为“usp_insertempdata”的存储过程,它将数据插入名为“Employee”的数据库表中,所以我执行了它,当我保存数据时,我带来了一个异常: “ConnectionString属性尚未初始化。 请帮忙! 这是我的代码

    SqlConnection _SqlConnection = new SqlConnection ( );
string strConnectionString = "";
SqlCommand cmd = new SqlCommand ( );

strConnectionString = @"Server='bisweb\bisweb';Database=x_kgabo;Trusted_Connection=true;";

Int32 rowsAffected;

List<object> lstParams = new List<object> ( );

cmd.Parameters.Add ( new SqlParameter ( "@vchEmployeeNo", SqlDbType.VarChar ) );
cmd.Parameters [ "@vchEmployeeNo" ].Value = txtEmployeeNumber.Text;
cmd.Parameters.Add ( new SqlParameter ( "@vchSurname", SqlDbType.VarChar ) );
cmd.Parameters [ "@vchSurname" ].Value = txtSurname.Text;
cmd.Parameters.Add ( new SqlParameter ( "@vchFirstName", SqlDbType.VarChar ) );
cmd.Parameters [ "@vchFirstName" ].Value = txtFirstName.Text;
cmd.Parameters.Add ( new SqlParameter ( "@vchPosition", SqlDbType.VarChar ) );
cmd.Parameters [ "@vchPosition" ].Value = txtPosition.Text;
cmd.Parameters.Add ( new SqlParameter ( "@vchIdNumber", SqlDbType.VarChar ) );
cmd.Parameters [ "@vchIdNumber" ].Value = txtIdNumber.Text;
cmd.Parameters.Add ( new SqlParameter ( "@vchGender", SqlDbType.VarChar ) );
cmd.Parameters [ "@vchGender" ].Value = drpdwnGender.SelectedItem.Value;
cmd.Parameters.Add ( new SqlParameter ( "@vchRace", SqlDbType.VarChar ) );
cmd.Parameters [ "@vchRace" ].Value = drpdwnRace.Text;
cmd.Parameters.Add ( new SqlParameter ( "@vchEmail", SqlDbType.VarChar ) );
cmd.Parameters [ "@vchEmail" ].Value = txtEmail.Text;
cmd.Parameters.Add ( new SqlParameter ( "@iBranchNo", SqlDbType.VarChar ) );
cmd.Parameters [ "@iBranchNo" ].Value = txtBranchNo.Text;
cmd.Parameters.Add ( new SqlParameter ( "@bHasMentor", SqlDbType.VarChar ) );
cmd.Parameters [ "@bHasMentor" ].Value = drpdwnMentor.Text;
cmd.Parameters.Add ( new SqlParameter ( "@vchMentorName", SqlDbType.VarChar ) );
cmd.Parameters [ "@vchMentorName" ].Value = txtMentorName.Text;
cmd.Parameters.Add ( new SqlParameter ( "@vchMentorStaffNo", SqlDbType.VarChar ) );
cmd.Parameters [ "@vchMentorStaffNo" ].Value = txtMentorStaffNo.Text;
cmd.Parameters.Add ( new SqlParameter ( "@dtMentorDate", SqlDbType.VarChar ) );
cmd.Parameters [ "@dtMentorDate" ].Value = calMentorDate.SelectedDate;

cmd.CommandText = "usp_insertempdata";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = _SqlConnection;

_SqlConnection.Open ( );

rowsAffected = cmd.ExecuteNonQuery ( );

_SqlConnection.Close ( );

try
{
    _SqlConnection.ConnectionString = strConnectionString;
    _SqlConnection.Open ( );

}
catch ( Exception ex )
{
    //throw  ex;
    messagefunctions ( );
    lblError.Text = "There was a problem inserting a record into the database, please consult with systems administrators " + ex.Message.ToString ( );
}
finally
{
    if ( _SqlConnection != null )
        _SqlConnection.Close ( );
}

2 个答案:

答案 0 :(得分:1)

您正在设置连接字符串:

strConnectionString = @"Server='bisweb\bisweb';Database=x_kgabo;Trusted_Connection=true;";

(顺便说一下:我相信你不应该在服务器名称周围使用任何单引号)

但您永远不会将其分配给SqlConnection

更改您的代码,以便实际在您的SqlConnection对象中使用连接字符串!另外 - 始终将SqlConnectionSqlCommand放入using(....) { .... }块....

string strConnectionString = @"Server=bisweb\bisweb;Database=x_kgabo;Trusted_Connection=true;";
string storedProcName = "usp_insertempdata";

using(SqlConnection _SqlConnection = new SqlConnection(strConnectionString))
using(SqlCommand cmd = new SqlCommand(storedProcName, _SqlConnection))
{
    cmd.CommandType = CommandType.StoredProcedure;

    Int32 rowsAffected;

    ......
}

答案 1 :(得分:0)

问题似乎是在调用ExecuteNonQuery之后和第一次调用Open之后分配连接字符串。第二个电话是胡说八道 正确的顺序是:

cmd.CommandType = CommandType.StoredProcedure;
_SqlConnection.ConnectionString = strConnectionString;
cmd.Connection = _SqlConnection;

try
{
    _SqlConnection.Open ( );

    rowsAffected = cmd.ExecuteNonQuery ( );

    _SqlConnection.Close ( );
}