PDA

View Full Version : مشکل و اخطار Input string was Not In a Correct Format.



reza11_2005
یک شنبه 16 خرداد 1395, 10:00 صبح
با سلام این تکه کد ببنید:

private void Add()
{
try
{
SqlCommand Cmd_Add = new SqlCommand("Add", sql);
Cmd_Add.CommandType = CommandType.StoredProcedure;

Cmd_Add.Parameters.Add("@a", SqlDbType.NVarChar).Value =Convert.ToString(ComBox.Text.Trim());

Cmd_Add.Parameters.Add("@s", SqlDbType.TinyInt).Value = Convert.ToInt64(ComBox1.SelectedValue.ToString());
Cmd_Add.Parameters.Add("@d", SqlDbType.TinyInt).Value = Convert.ToInt64(ComBox2.SelectedValue.ToString());

Cmd_Add.Parameters.Add("@f", SqlDbType.NVarChar).Value =Convert.ToString(TexT2.Text.Trim());
Cmd_Add.Parameters.Add("@g", SqlDbType.NVarChar).Value =Convert.ToString(TexT3.Text.Trim());

Cmd_Add.Parameters.Add("@h", SqlDbType.NVarChar).Value = Convert.ToString(TexT4.Text.Trim());
Cmd_Add.Parameters.Add("@j", SqlDbType.NVarChar).Value = Convert.ToString(TexT5.Text.Trim());

Cmd_Add.Parameters.Add("@k", SqlDbType.Bit).Value = true;
Cmd_Add.Parameters.Add("@l", SqlDbType.Bit).Value = true;

Cmd_Add.Parameters.Add("@q", SqlDbType.NVarChar).Value = Convert.ToInt64(TexT6.Text.Trim());
Cmd_Add.Parameters.Add("@w", SqlDbType.NVarChar).Value = Convert.ToInt64(TexT7.Text.Trim());
Cmd_Add.Parameters.Add("@e", SqlDbType.NVarChar).Value = Convert.ToInt64(TexT8.Text.Trim());

Cmd_Add.Parameters.Add("@r", SqlDbType.Int).Value = Convert.ToInt64(ComBox3.SelectedValue);
Cmd_Add.Parameters.Add("@t", SqlDbType.Int).Value = Convert.ToInt64(ComBox4.SelectedValue);

Cmd_Add.Parameters.Add("@y", SqlDbType.NVarChar).Value = Convert.ToString(TexT10.Text.Trim());

Cmd_Add.Parameters.Add("@u", SqlDbType.NVarChar).Value = Convert.ToInt64(TexT9.Text.Trim());
Cmd_Add.ExecuteNonQuery();
}
catch (Exception ErMe)
{
MessageBox.Show(ErMe.Message);

//throw;
}
}



و تکه کد sp


ALTER PROCEDURE [dbo].[Add]
@a nvarchar(50),
@se tinyint,
@d tinyint,
@f nvarchar(50),
@g nvarchar(100),
@h nvarchar(16),
@j nvarchar(11),
@k bit,
@l bit,
@q nvarchar(50),
@w nvarchar(50),
@e nvarchar(50),
@r int,
@t int,
@y nvarchar(200),
@u nvarchar(50)
AS
BEGIN
INSERT INTO CustomerDetail (a,s,d,f,g,h,j,
k,l,q,w,e,r,t,y,u)
VALUES (@a,@s,@d,@f,@g,@h,@j,
@k,@l,@q,@w,@e,@r,@t,@y,@u)
END


خوب حالا من هر کاری می کنم
این اخطار Input string was Not In a Correct Format.
می دهد عجیب این است که یک ساعت درسته ساعت دیگر باز این اخطار می دهد
ممون می شوم در این مورد به من کمک کنید

محمد آشتیانی
یک شنبه 16 خرداد 1395, 11:17 صبح
سلام
شما یک سری کانورت انجام دادی که عجیبه
مثلا برای پارامترهای q , w و e چرا با اینکه دیتاتایپ اونها VARCHAR هست ، مقادیر رو به int64 تبدیل کردی؟ و یا توی پارامترهای s و d مقادیر رو به int64 تبدیل کردی ، در صورتی که پارامترها بایت هستن؟ همین داستان برای پامترهای r و t هم وجود داره.
تبدیل های Convert.ToString هم نوشتنشون لزومی نداره ، شما داری مقدار تکست باکس رو میگیری که String هستن


به اینصورت اصلاح کنید (البته دقت کنید مقادیر درست داشته باشید ، برای مثال برای فیلدی که int هست کاراکتر قبول نکنید در ورودی)

try
{
SqlCommand Cmd_Add = new SqlCommand("Add", sql);
Cmd_Add.CommandType = CommandType.StoredProcedure;


Cmd_Add.Parameters.AddWithValue("@a", ComBox.Text.Trim());


Cmd_Add.Parameters.AddWithValue("@s", Convert.ToByte(ComBox1.SelectedValue.ToString()));
Cmd_Add.Parameters.AddWithValue("@d", Convert.ToByte(ComBox2.SelectedValue.ToString()));


Cmd_Add.Parameters.AddWithValue("@f", TexT2.Text.Trim());
Cmd_Add.Parameters.AddWithValue("@g", TexT3.Text.Trim());


Cmd_Add.Parameters.AddWithValue("@h", TexT4.Text.Trim());
Cmd_Add.Parameters.AddWithValue("@j", TexT5.Text.Trim());


Cmd_Add.Parameters.AddWithValue("@k", true);
Cmd_Add.Parameters.AddWithValue("@l", true);


Cmd_Add.Parameters.AddWithValue("@q", TexT6.Text.Trim());
Cmd_Add.Parameters.AddWithValue("@w", TexT7.Text.Trim());
Cmd_Add.Parameters.AddWithValue("@e", TexT8.Text.Trim());


Cmd_Add.Parameters.AddWithValue("@r", Convert.ToInt32(ComBox3.SelectedValue));
Cmd_Add.Parameters.AddWithValue("@t", Convert.ToInt32(ComBox4.SelectedValue));


Cmd_Add.Parameters.AddWithValue("@y", TexT10.Text.Trim());
Cmd_Add.Parameters.AddWithValue("@u", TexT9.Text.Trim());


Cmd_Add.ExecuteNonQuery();
}
catch (Exception ErMe)
{
MessageBox.Show(ErMe.Message);
//throw;
}



ضمنا سعی کنید برای کنترل ها و پارامترها ، نام های معنا دار انتخاب کنید ، به این شکل به مشکل بر خواهید خورد.


موفق باشید.