خطای Can't convert nvarchar to bigint در سی شارپ
سلام
من در حال نوشتن یک برنامه با wpf هستم.
تابع زیر یک SP در SQL 2014 رو که دو ورودی و دو خروجی داره فراخوانی میکنه.
private bool CheckDuplicate()
{
var dupN = new SqlParameter("DuplicateN", System.Data.SqlDbType.Bit)
{
Direction = System.Data.ParameterDirection.Output
};
var dupR = new SqlParameter("DuplicateR", System.Data.SqlDbType.Bit)
{
Direction = System.Data.ParameterDirection.Output
};
var NParam = new SqlParameter("Name", TextBox_Name.Text);
var RParam = new SqlParameter("RegisterationCode", Convert.ToInt64(TextBox_RCode.Text));
db.Database.ExecuteSqlCommand("ChkDuplicate @RegisterationCode,@Name,@DuplicateR out, @DuplicateN out", RParam, NParam, dupR, dupN);
var dupNvalue = (Boolean)dupN.Value;
var dupRvalue = (Boolean)dupR.Value;
if(dupNvalue==false && dupRvalue==false)
{
return true;
}
return false;
}
این تابع فقط در زمانی که در رویداد GotFocus در تکس باکس TextBox_Name فراخوانیش کنم بدون مشکل اجرا میشه.
اگر در جایی دیگه مثلا در هنگام کلیک بر روی دکمه ثبت موجود در پنجره و یا رویداد GotFocus و یا LostFocus هر یک از دیگر اشیا و عناصر موجود در پنجره فراخوانی کنم خطای میگیره.
این خطا
Can't convert nvarchar to bigint
در هنگام رسیدن به خط
db.Database.ExecuteSqlCommand("ChkDuplicate @RegisterationCode,@Name,@DuplicateR out, @DuplicateN out", RParam, NParam, dupR, dupN);
داده میشه.
وقتی یک breakpoint میذارم میبینم که مقدار درست به متغیر داده شده ولی پیغام خطا داده و اجرای برنامه متوقف میشه.
پاسخ هوش مصنوعی
خطای "Can't convert nvarchar to bigint" معمولاً به خاطر این است که مقداری که به عنوان پارامتر به SQL Server ارسال می شود، با نوع داده مورد انتظار در پایگاه داده مطابقت ندارد. در کد شما، به نظر می رسد که پارامتر `RegisterationCode` به درستی به نوع `SqlDbType.BigInt` تبدیل نمی شود. احتمالاً مقدار موجود در `TextBox_RCode` نمی تواند به `Int64` تبدیل شود.
برای رفع این مشکل، می توانید پیش از تبدیل، چک کنید که مقدار ورودی قابل تبدیل باشد یا خیر. همچنین می توانید نوع داده `RParam` را به `SqlDbType.BigInt` مشخص کنید. به کد زیر توجه کنید:
private bool CheckDuplicate()
{
var dupN = new SqlParameter("DuplicateN", System.Data.SqlDbType.Bit)
{
Direction = System.Data.ParameterDirection.Output
};
var dupR = new SqlParameter("DuplicateR", System.Data.SqlDbType.Bit)
{
Direction = System.Data.ParameterDirection.Output
};
var NParam = new SqlParameter("Name", TextBox_Name.Text);
long registrationCode;
// بررسی اینکه آیا مقدار قابل تبدیل به Int64 است
if (!long.TryParse(TextBox_RCode.Text, out registrationCode))
{
throw new FormatException("مقدار وارد شده برای کد ثبت نام معتبر نیست.");
}
var RParam = new SqlParameter("RegisterationCode", registrationCode);
db.Database.ExecuteSqlCommand("ChkDuplicate @RegisterationCode,@Name,@DuplicateR out, @DuplicateN out", RParam, NParam, dupR, dupN);
var dupNvalue = (Boolean)dupN.Value;
var dupRvalue = (Boolean)dupR.Value;
if(dupNvalue == false && dupRvalue == false)
{
return true;
}
return false;
}
با این روش اگر ورودی کاربر نتواند به `long` تبدیل شود، خطا مناسب نمایش داده خواهد شد. این کار به شما کمک می کند تا مطمین شوید که مقادیر ورودی همیشه قابل استفاده هستند و از بروز خطا در زمان اجرای کد جلوگیری می شود.
خطای شما Can't convert nvarchar to bigint هست. یعنی یکی از پارامترهاتون از نوع long یا bigint هست در دیتابیس، ولی دارید بهش یک رشته ارسال می کنید. باید تک تک پارامترها و DataType اونها رو چک کنید و مقادیری هم که بهش ارسال می کنید چک کنید که اشتباه ارسال نشه.
سلام
با این که همه چیز به ظاهر درست بود یعنی تبدیل nvarchar به bigint درست انجام میشد (با قرار دادن breakponit و اجرای خط به خط و مشاهده مقادیر اختصاص داده شده به هر متغییر) در هر صورت
این مشکل رو با تغییر خط
db.Database.ExecuteSqlCommand("ChkDuplicate @RegisterationCode,@Name,@DuplicateR out, @DuplicateN out", RParam, NParam, dupR, dupN);
به شکل زیر حل کردم.
db.Database.ExecuteSqlCommand("ChkDuplicate @Name,@RegisterationCode,@DuplicateR out, @DuplicateN out",NParam, RParam, dupR, dupN);
حالا نمیدونم چرا ولی با تغییر جایگاه دو متغییر ارسالی به sp مشکل حل شد. (پس و پیش کردن ارسال دو متغییر)
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- حذف کامل یک رکورد در جدول ریلیشن شده
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf