2013-08-19 6 views
0

Я хочу вставить данные в базу данных.Я хочу вставить данные в базу данных

string pa = "4898"; 
string equery="Insert into Users(pas)values('"+pa+"')"; 

пока я вставляя данные в базу данных, ее говорит строка или двоичные данные будут усечены заявление было прекращено. Поэтому я изменил nvarchar(50) на nvarchar(max) в таблице.

И эта инструкция была выполнена и сохранена в базе данных нечитабельного формата, например 傉䝎਍ਚ. И как может закончиться эта проблема и сохранить данные в базе данных как «4898».

private void save_Click(object sender, EventArgs e) 
{ 
    string password = "4898"; 
    string equery="Insert into Users(name,gender,dateofbirth,age,fathername, 
             address,citiy,state,country,zipcode, 
             mobile,phone,email,jobtitle, 
             dateofjoin,pic,passwords) 
          values('"+nametxt.Text.ToString().Trim()+"', 
            @gender, 
            '"+dateofbirth.Text.ToString().Trim()+"', 
            '"+age.Value.ToString().Trim()+"', 
            '"+fathertxt.Text.ToString().Trim()+"', 
            '"+addresstxt.Text.ToString().Trim()+"', 
            '"+citiytxt.Text.ToString().Trim()+"', 
            '"+statetxt.Text.ToString().Trim()+"', 
            '"+country.Text.ToString().Trim()+"', 
            '"+ziptxt.Text.ToString().Trim()+"', 
            '"+mobiletxt.Text.ToString().Trim()+"', 
            '"+phonetxt.Text.ToString().Trim()+"', 
            '"+emailtxt.Text.ToString().Trim()+"', 
            '"+jobtxt.Text.ToString().Trim()+ 
            "','"+dateofjoin.Text.ToString().Trim()+"', 
            '"+password+"',@pic)"; 
    SqlCommand cmd = new SqlCommand(equery, con); 

    if(male.Checked) 
     cmd.Parameters.AddWithValue("@gender","Male"); 
    else 
     cmd.Parameters.AddWithValue("@gender","Female"); 

    MemoryStream stream = new MemoryStream(); 
    pictureBox1.Image.Save(stream,System.Drawing.Imaging.ImageFormat.Png); 
    byte[] pic = stream.ToArray(); 
    cmd.Parameters.AddWithValue("@pic", pic); 

    try 
    { 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     MessageBox.Show("Saved Successfully"); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    finally 
    { 
     con.Close(); 
    } 

    MessageBox.Show("Saved Successfully"); 
    idtxt.Text = ""; 
    nametxt.Text = ""; 
    age.Value = Convert.ToDecimal(null); 
    male.Checked = false; 
    female.Checked = false; 
    dateofbirth.Text = ""; 
    fathertxt.Text = ""; 
    addresstxt.Text = ""; 
    citiytxt.Text = ""; 
    statetxt.Text = ""; 
    country.Text = ""; 
    ziptxt.Text = ""; 
    mobiletxt.Text = ""; 
    phonetxt.Text = ""; 
    emailtxt.Text = ""; 
    dateofjoin.Text = ""; 
    jobtxt.Text = ""; 
    pictureBox1.Image = null; 
} 
+1

'傉 䝎 ਍ਚ' - это начало изображения PNG, интерпретируемого как UTF-16. – icktoofay

+0

Пожалуйста, положите тормозную точку на экстерьер и скопируйте этот запрос и попробуйте запустить на сервере sql. Проверьте, какие данные вставляются .... –

+0

показать структуру таблицы и значение equery во время отладки – kbvishnu

ответ

4

Глядя на ваши вставки заявление:

"Insert into Users(... pic,passwords) values (... '"+password+"',@pic)"; 

, кажется, что вы взаимозаменяемыми pic и passwords.


Кроме того, как другие уже отмечали в комментариях, вы должны использовать только параметризованные запросы (для предотвращения SQL Injection), особенно при обработке текста вставленный пользователем или любого другого ненадежного источника.

0

В коде есть неправильная ошибка. Обмен

'"+password+"',@pic)"; 

в вашей строке экстерьер. Кстати предложение! Лучше использовать 'linq to Sql', а не метод запроса! Потому что «Linq to Sql» делает все для вас. вам просто нужно давать значения :)

+0

LINQ to SQL не подходит для всех ситуаций, например, он несовместим с базами данных SQL CE. В некоторых ситуациях он может также добавить ненужные накладные расходы для программы, когда достаточно простого запроса. – Amicable

+0

@ Приходится, о, я не знал! : p спасибо за информацию мысль :) –