Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Dari .NET saya bisa mendapatkan string SQL lengkap yang dihasilkan oleh objek SqlCommand (dengan Parameter SQL)?

Perulangan sederhana yang mengganti semua nama parameter dengan nilainya akan memberi Anda sesuatu yang mirip dengan hasil akhirnya, tetapi ada beberapa masalah.

  1. Karena SQL tidak pernah benar-benar dibangun kembali menggunakan nilai parameter, hal-hal seperti baris baru dan tanda kutip tidak perlu dipertimbangkan
  2. Nama parameter dalam komentar tidak pernah benar-benar diproses untuk nilainya, tetapi dibiarkan apa adanya

Dengan yang ada, dan dengan mempertimbangkan nama parameter yang dimulai dengan karakter yang sama, seperti @NAME dan @NAME_FULL , kita dapat mengganti semua nama parameter dengan nilai yang akan menggantikan parameter tersebut:

string query = cmd.CommandText;
foreach (SqlParameter p in cmd.Parameters.OrderByDescending(p => p.ParameterName.Length))
{
    query = query.Replace(p.ParameterName, p.Value.ToString());
}

ada satu masalah yang tersisa dengan ini, bagaimanapun, dan itu adalah jika parameter adalah string, maka SQL yang awalnya terlihat seperti ini:

SELECT * FROM yourtable WHERE table_code = @CODE

akan terlihat seperti ini:

SELECT * FROM yourtable WHERE table_code = SOME CODE WITH SPACES

Ini jelas bukan SQL legal, jadi kita perlu memperhitungkan beberapa tipe parameter juga:

DbType[] quotedParameterTypes = new DbType[] {
    DbType.AnsiString, DbType.Date,
    DbType.DateTime, DbType.Guid, DbType.String,
    DbType.AnsiStringFixedLength, DbType.StringFixedLength
};
string query = cmd.CommandText;

var arrParams = new SqlParameter[cmd.Parameters.Count];
cmd.Parameters.CopyTo(arrParams, 0);

foreach (SqlParameter p in arrParams.OrderByDescending(p => p.ParameterName.Length))
{
    string value = p.Value.ToString();
    if (quotedParameterTypes.Contains(p.DbType))
        value = "'" + value + "'";
    query = query.Replace(p.ParameterName, value);
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL sum by year report, mencari solusi yang elegan

  2. Bagaimana cara mengubah baris menjadi kolom di SQL Server?

  3. Tidak dapat membuat connectionstring untuk desktop jarak jauh untuk aplikasi C#

  4. Pernyataan SELECT yang memberikan nilai ke variabel tidak boleh digabungkan dengan operasi pengambilan data

  5. Penggabungan C# SQLConnection