У меня проблема при попытке прочитать строки из SQL Server 2005 из кода на C #
Идея:
В моей базе данных (SQL Server 2005 Express) есть таблица со столбцом (с типом данных ntext
), содержащим HTML-код.
В моем приложении на C # пользователь может ввести предложение (HTML-код) и выполнить поиск по строкам, содержащим это предложение.
Запрос, сгенерированный из моего приложения:
USE test
SELECT
al.aal_Id As ID,
al.aal_Description As Opis,
au.au_Title As Tytul_szablonu,
au.au_Note As Nazwa_szablonu
FROM dbo.au_Allegro al
LEFT OUTER JOIN dbo.au__Auction au ON (al.aal_AuctionId = au.au_Id)
WHERE
au.au_Type = 11
AND al.aal_Description COLLATE SQL_Latin1_General_CP1_CS_AS LIKE '%%' ESCAPE '\'
В моем приложении я конвертирую специальные символы (например, ',) и добавляю escape-символы.
Пользователь пытается найти очень длинное предложение (около 7000+ символов), когда он пытается это сделать, процесс sqlserver.exe
занимает всю его оперативную память, а время поиска составляет около 30+ минут (у него около 1000+ строк в этой таблице).
Запрос возвращает 0 строк.
Когда он пытается выполнить (тот же самый) запрос в SQL Server Management Studio, база данных показывает результаты за несколько секунд (со строками).
В моем приложении я использую SqlDataAdapter
:
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandTimeout = 0;
cmd.Connection = conn;
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(kwerenda, conn);
try
{
da.Fill(dt);
}
Я пытался SqlDataReader
:
dr = cmd.ExecuteReader();
while (dr.Read())
{
string id = dr["ID"].ToString();
string opis = dr["Opis"].ToString();
string tytul = dr["Tytul_szablonu"].ToString();
string nazwa = dr["Nazwa_szablonu"].ToString();
dt.Rows.Add(id, opis, tytul, nazwa);
}
Когда я пытался смоделировать это в своей тестовой базе данных, у меня не было проблем с поисковыми (такими же) предложениями.
У вас есть какие-нибудь советы для меня?
Я не могу внести какие-либо изменения в данные пользователя, я не могу зайти к нему и проверить, что происходит.