0

ここに私のストアドプロシージャがあります:

ALTER proc [dbo].[allrecp]
    @peid int=0,
    @pename varchar(20)='',
    @pdes varchar(20)='',
    @pdoj date='1111-1-1',
    @sal money=0,
    @dept int=0,
    @loc int=0,@i int=0
    as begin
    if(@i=1)
    begin
    insert into Employee values(@pename,@pdes,@pdoj,@sal,@dept,@loc)
    end
    if(@i=2)
    begin
    update Employee set ENAME=@pename,DESEGNATION=@pdes,DOJ=@pdoj,SALARY=@sal,DEPTID=@dept,LOCATIONID=@loc WHERE EMPID=@peid
    end
    if(@i=3)
    delete EMPLOYEE where EMPID=@peid
end

そして私のC#コードは次のとおりです。

private void btndelete_Click(object sender, EventArgs e)
{
    parameteres(3);
}

private void btnupdate_Click(object sender, EventArgs e)
{
    parameteres(2);
}

private void BTNINSERT_Click(object sender, EventArgs e)
{
    parameteres(1);
}

public void parameteres(int i)
{
    cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandText = "allrecp";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@peid", SqlDbType.Int)).Value = txtempid.Text;
    cmd.Parameters.Add(new SqlParameter("@pename", SqlDbType.VarChar, 20)).Value = txtename.Text;
    cmd.Parameters.Add(new SqlParameter("@pdes", SqlDbType.VarChar, 20)).Value = txtdesg.Text;
    cmd.Parameters.Add(new SqlParameter("@pdoj", SqlDbType.Date)).Value = txtdoj.Text;

ここで私は問題に直面しています:

パラメータ値を String から DateTime に変換できませんでした

コード:

cmd.Parameters.Add(new SqlParameter("@dept", SqlDbType.Int)).Value = txtdept.Text;
cmd.Parameters.Add(new SqlParameter("@sal", SqlDbType.Money)).Value = txtsal.Text;
cmd.Parameters.Add(new SqlParameter("@loc", SqlDbType.Int)).Value = txtlocation.Text;
cmd.Parameters.Add(new SqlParameter("@i", SqlDbType.Int)).Value = i;
con.Open();
int x = cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show(x + " rows effected");

ここで私は問題に直面しています:

cmd.Parameters.Add(new SqlParameter("@dept", SqlDbType.Int)).Value = txtdept.Text;

デフォルト値をストアドプロシージャに渡す方法は?

4

3 に答える 3

0

サチンの答えに加えて、バリデーターを使用して日付値のみを受け入れるように、日付ピッカー コントロールを使用するか、テキスト ボックスを検証することをお勧めします。

于 2013-03-21T07:46:17.680 に答える
0

次のように、日付型のデフォルト パラメータを設定できます。

@Date Date = 'october 10, 2012'
于 2013-03-21T08:23:03.803 に答える
0

1- デフォルトの日付値を渡す方法:

SP内のデフォルト値を持つパラメーターは、それをオプションにします。SP 内でパラメーターのデフォルトを設定し、コードから SP を呼び出すときにパラメーターをまったく渡さないようにすることができます。これにより、デフォルト値が考慮されます。

あなたのSPで

@pdoj date='1111-1-1' -- Make sure to use a valid date. The min valid date for SQL server is `1753-1-1`

オプションのパラメーターです。UI で使用可能な値がない場合は、SP の呼び出し中にパラメーターを渡さないでください。したがって、デフォルト値と見なされます。

2-代わりに空の文字列/無効な日付を渡さないようにしてください。ユーザーが日付を入力しない場合は追加の日付パラメーターをバイパスするか、ビジネスルールに従って検証してください

したがって、日付パラメーターを追加するには、次のように条件付きで追加する必要があります。

if(  IsValidDate(txtdoj.Text) )
{
cmd.Parameters.Add(new SqlParameter("@pdoj", SqlDbType.Date)).Value = Convert.ToDateTime(txtdoj.Text);
}

// * IsValidDate は、ビジネス ルールに従って日付を検証する必要があるというヒントにすぎません。空の日付を無効と見なすか、デフォルトの日付を考慮できるようにします。

于 2013-03-21T07:56:00.387 に答える