1

「Employee」というデータベーステーブルにデータを挿入する「usp_insertempdata」というストアドプロシージャを作成したので、それを実行しました。データを保存すると、「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 ( );
}
4

2 に答える 2

1

接続文字列を設定しています:

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

(ところで:サーバー名を一重引用符で囲むべきではないと思います)

しかし、あなたはそれをあなたのSqlConnection!に割り当てることは決してありません。

接続文字列が実際にSqlConnectionオブジェクトで使用されるように、コードを変更してください。また-常にあなたSqlConnectionSqlCommandusing(....) { .... }ブロックに入れてください....

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;

    ......
}
于 2011-02-17T12:56:33.027 に答える
0

問題は、ExecuteNonQueryを呼び出した後、およびOpenを最初に呼び出した後に接続文字列を割り当てていることのようです。2番目の呼び出しはナンセンスです。
正しいシーケンスは次のとおりです。

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

try
{
    _SqlConnection.Open ( );

    rowsAffected = cmd.ExecuteNonQuery ( );

    _SqlConnection.Close ( );
}
于 2011-02-17T12:54:11.290 に答える