Перейти к содержимому


Фотография
- - - - -

MS SQL Server 2000. Оптимизирование запроса на встваку данных


  • Эта тема закрыта Тема закрыта
1 ответов в этой теме

#1 key

key

    -=SunKain=-

  • True Members
  • PipPipPipPipPip
  • 2 489 сообщений
12
Обычный
  • Пол:Мужчина
  • Город:Аден

Опубликовано 26 Март 2007 - 13:58

Всем привет:)
вот есть код на C#, он вставляет 100 картинок размером 430кб в базу данных на MS SQL Server 2000. Вставляет очень и очень медленно, так как вставляет кусочками по 16 байт. Размер поля Image 16 байт, соотвественно выбраны и кусочки. С такими параметрами время записи превышает 2 часа блин. Это жутко бесит:) Кто-нибудь знаешь как можно уменьшить время записи в БД? Одно из решений - это увеличить размер куска с 16 байт до 16 кб или больше, но как это сделать? ведь размер поля типа Image менять нельзя, он всегда 16 байт.
код:
private void Encrypt_Click(object sender, System.EventArgs e)        
{                        
start.Text = DateTime.Now.ToString();            
using ( SqlConnection connection = new SqlConnection("Data source=Server; Initial Catalog=mytestdb; User ID='sa';") )            
{                
// Writing an image to a DB                
connection.Open();                
DirectoryInfo di = new DirectoryInfo(@"D:distship");                
ArrayList files = new ArrayList(di.GetFiles("*.tif.pgp"));                
for ( int i = 0; i < files.Count; i++ )                
{                    
FileInfo fi = files[i] as FileInfo;                    
SqlCommand sqlCommand  = new SqlCommand("INSERT INTO Images (ID, HHRefNumber, ReplaceCount, ReplaceDate, ImageSrc) " +                                                            "Values (newid(), @OrderNumber, @ReplaceCount, @ReplaceDate, 0x0);" +                                                            "SELECT @Pointer = TEXTPTR(ImageSrc) FROM Images WHERE HHRefNumber = @OrderNumber", connection);                    
sqlCommand.Parameters.Add("@OrderNumber", SqlDbType.VarChar, 50).Value = i.ToString();                    
sqlCommand.Parameters.Add("@ReplaceCount", SqlDbType.Int, 4).Value = 0;                    
sqlCommand.Parameters.Add("@ReplaceDate", SqlDbType.DateTime, 8).Value = DateTime.Now;                    
SqlParameter ptrParm = sqlCommand.Parameters.Add("@Pointer", SqlDbType.Binary, 16);                    ptrParm.Direction = ParameterDirection.Output;                    
sqlCommand.ExecuteNonQuery();                                        
StorePhoto(fi.FullName, (byte[])ptrParm.Value, connection);                
}            
}                
finish.Text = DateTime.Now.ToString();        
}        
private void StorePhoto(string path, byte[] pointer, SqlConnection conn)        
{            
int bufferLen = 16;  
// The size of the "chunks" of the image.            
SqlCommand appendToPhoto = new SqlCommand("UPDATETEXT Images.ImageSrc @Pointer @Offset 0 @Bytes", conn);            
SqlParameter ptrParm  = appendToPhoto.Parameters.Add("@Pointer", SqlDbType.Binary, 16);            
ptrParm.Value = pointer;            
SqlParameter photoParm = appendToPhoto.Parameters.Add("@Bytes", SqlDbType.Image, bufferLen);           
SqlParameter offsetParm = appendToPhoto.Parameters.Add("@Offset", SqlDbType.Int);            
offsetParm.Value = 0;            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);            
BinaryReader br = new BinaryReader(fs);            
byte[] buffer = br.ReadBytes(bufferLen);            
int offset_ctr = 0;            
while (buffer.Length > 0)            
{                
photoParm.Value = buffer;                
appendToPhoto.ExecuteNonQuery();                
offset_ctr += bufferLen;                
offsetParm.Value = offset_ctr;                
buffer = br.ReadBytes(bufferLen);            
}            
br.Close();            
fs.Close();        
}

  • 0
Mess with the best
Die like the rest

Размещенное изображение

Пуля производит удивительные изменеия в голове, даже если она попала в задницу.
(С) Лукьяненко "Черновик"

Conseal nohing.
And watch the fools searching forever.

#2 key

key

    -=SunKain=-

  • True Members
  • PipPipPipPipPip
  • 2 489 сообщений
12
Обычный
  • Пол:Мужчина
  • Город:Аден

Опубликовано 26 Март 2007 - 16:59

проблема решена:) всем спасибо:)
  • 0
Mess with the best
Die like the rest

Размещенное изображение

Пуля производит удивительные изменеия в голове, даже если она попала в задницу.
(С) Лукьяненко "Черновик"

Conseal nohing.
And watch the fools searching forever.


Посетителей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных пользователей