Pertanyaan Cara meneruskan kata kunci default untuk pemanggilan fungsi bernilai tabel di ADO.NET


Jadi ini kesepakatannya. Dalam basis data kami, kami membungkus sebagian besar bacaan kami (yaitu pernyataan yang dipilih) dalam fungsi yang bernilai tabel untuk tujuan keamanan dan modularitas. Jadi saya punya TVF yang mendefinisikan satu atau lebih parameter opsional.

Saya yakin memiliki TVF dengan parameter default mengamanatkan penggunaan kata kunci default saat memanggil TVF seperti ini:

select * from fn_SampleTVF(123, DEFAULT, DEFAULT)

Itu baik-baik saja, semuanya bekerja di penganalisis kueri, tetapi ketika tiba saatnya untuk benar-benar membuat permintaan ini dari ADO.NET, saya tidak yakin bagaimana cara membuat parameter sql yang benar-benar menempatkan kata default ke dalam sql yang ditampilkan.

Saya memiliki sesuatu yang kurang lebih seperti ini sekarang:

String qry = "select * from fn_SampleTVF(@requiredParam, @optionalParam)";

DbCommand command = this.CreateStoreCommand(qry, CommandType.Text);

SqlParameter someRequiredParam = new SqlParameter("@requiredParam", SqlDbType.Int);
someRequiredParam.Value = 123;
command.Parameters.Add(someRequiredParam);

SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
optionalParam.Value = >>>> WTF? <<<<
command.Parameters.Add(optionalParam);

Jadi, siapa pun punya ide bagaimana cara lulus default ke TVF?


5
2017-12-02 21:28


asal


Jawaban:


SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
optionalParam.Value = >>>> WTF? <<<<
command.Parameters.Add(optionalParam);

Anda tidak perlu menambahkan kode di atas (Parameter opsional) untuk default. SQL Server akan menggunakan default sebagaimana didefinisikan dalam UDF Anda. Namun jika Anda ingin memberikan nilai berbeda, maka Anda dapat lulus:

SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int); 
optionalParam.Value = newValue; 
command.Parameters.Add(optionalParam); 

3
2017-11-01 08:41



Saya akan melakukannya:

public void YourMethod(int rparam, int? oparam = null)
{
    String qry = string.Format("select * from fn_SampleTVF(@requiredParam, {0})"
        , !oparam.HasValue ? "default" : "@optionalParam");

    SqlParameter someRequiredParam = new SqlParameter("@requiredParam", SqlDbType.Int);
    someRequiredParam.Value = rparam;
    command.Parameters.Add(someRequiredParam);

    if (oparam.HasValue)
    {
        SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
        optionalParam.Value = oparam.Value;
        command.Parameters.Add(optionalParam);
    }
}

1
2017-12-06 06:39



Anda dapat meneruskan Null sebagai nilai parameter.

Artikel ini menunjukkan beberapa contoh: http://support.microsoft.com/kb/321902


0
2017-12-02 21:39