PDA

View Full Version : مبتدی: وارد نکردن مقدار خالی در دیتا بیس



hamidtmu
دوشنبه 10 آبان 1400, 01:11 صبح
با سلام. من کد زیر را برای یک تکست نوشته ام که در این تکست ممکنه یک سری مقدار خالی باشه. به چه صورت این مقادیر خالی را با عدد صفر جای گزین کنم. همه چیزش درسته فقط مقدار خالی را در دیتا بیس به صورت nan میزنه
if (finalName == "FORM1") {
dt1.Rows.Clear();
foreach (string line in lines)
{
var number = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);


DataRow dr1 = dt1.NewRow();
int columnIndex = 0;
for (int i = 1; i <= 8; i++)
{

dr1[i] = number[columnIndex++];
}


dt1.Rows.Add(dr1);
}

isaac23
دوشنبه 10 آبان 1400, 10:27 صبح
بهتره از سمت دیتا بیس مقدار Null رو اونجا مشخص کنی
توی قسمت دیفالت ولیو بیا مقدار 0 هر چیزی که نیاز هست رو وارد کن تا در صورتی که کاربر مقدار خالی رو زد بصورت پیش فرض مقداری که مشخص کردی رو وارد کنه

بنداز سمت بانک نه برنامه بهتره اینجوری

hamidtmu
دوشنبه 10 آبان 1400, 11:10 صبح
به این صورت امکان پذیر نیست(چون توی دیتا بیس هر مقدار هم تعریف کنیم خالی کپی ). ایا امکانش هست که بگیم داده های خالی را به عدد صفر تبدیل کن و سپس کپی را انجام بده. می خوام توی کد بالا یک کد اضافه کنه بگم اگه خالی بود به فلان عدد تبدیل شود

336699
دوشنبه 10 آبان 1400, 15:51 عصر
نوع ستون دیتابیس عددی هست؟
یک نمونه از داده ها را ارسال نمایید و اینکه چه ایتم هایی رو از اون می خوانید؟

hamidtmu
دوشنبه 10 آبان 1400, 21:37 عصر
نوع ستون دیتابیس عددی هست؟
یک نمونه از داده ها را ارسال نمایید و اینکه چه ایتم هایی رو از اون می خوانید؟

این نمونه فایل هست.
بازم خدمتتون عرض کنم که فایل را کامل به دیتا بیس ارسال می کنه فقط می خوام مقدار خالی را بگم جاش مثلا عدد صفر بزاره- شما که اساتید برنامه نویس هستید ایا می تونید با یک کد در همون کد اولی که نوشتم این کار را کرد . اگر بلی چه بنویسم. حلقه فور گذاشتم اگه بشه توی همون حلقه این کار را انجام بده خوبه. اینم بگم که اینو اول به یه لیست باکس توی سی شارپ میفرستم. حالا تغیر عدد فقط قبل از ارسال به دیتا بیس باشه-چون اونجا خیلی عملیات روش پیاده میشه

336699
سه شنبه 11 آبان 1400, 08:52 صبح
سلام

این قسمت از کدی که نوشتید یه باگی داره

var number = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);


اگر مثلا در ستون دوم هیچ عددی نباشد، عدد ستون سوم در ستون دوم قرار میگیرد و ستون سوم خالی میشود.

یعنی اعداد ستون دوم و سوم جابجا میشوند.(این اتفاق حتی برای ستون اول نیز می افتد)

به این صورت تغییر بدهید

var number = line.Split(new string[] { " " }, StringSplitOptions.None);



برای بررسی اینکه ستون مورد نظر خالی هستش یا نه


for (int i = 1; i <= 8; i++)
{
var columX = number[columnIndex++];
if (!string.IsNullOrWhiteSpace(columX))
{
dr1[i] = columX;
}
else
{
dr1[i] = 0;
}
}

hamidtmu
سه شنبه 11 آبان 1400, 15:31 عصر
سلام

این قسمت از کدی که نوشتید یه باگی داره

var number = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);


اگر مثلا در ستون دوم هیچ عددی نباشد، عدد ستون سوم در ستون دوم قرار میگیرد و ستون سوم خالی میشود.

یعنی اعداد ستون دوم و سوم جابجا میشوند.(این اتفاق حتی برای ستون اول نیز می افتد)

به این صورت تغییر بدهید

var number = line.Split(new string[] { " " }, StringSplitOptions.None);



برای بررسی اینکه ستون مورد نظر خالی هستش یا نه


for (int i = 1; i <= 8; i++)
{
var columX = number[columnIndex++];
if (!string.IsNullOrWhiteSpace(columX))
{
dr1[i] = columX;
}
else
{
dr1[i] = 0;
}
}



سپاس فراوان از شما دوست برنامه نویس عزیز انشالله که همیشه تندرست باشید.کد شما جواب داد ولی
دو تا نکته هست که به ترتیب اهمیت خدمتتون میگم
مهمترین نکته
if (!string.IsNullOrWhiteSpace(columX))
این کد ستون های خالی را نمیخونه باید حتما اسپیس توش باشه تا بخونه در صورتی که سلول های فایل بنده اسپیس نداره و خالی هست. فایل های من همه اکسل هستند که تبدیل به تکست می شوند(در اصل هیچی توش نیست)

نکته بعدی اون کدی که فرمودید اصلاح کنم اون کد را چند بار چک کردم و ایرادی نداشت. حتی یک ستون را کامل پاک کردم ولی جابجا نشد و کدی که شما راهنمایی کردید را گذاشتم نتونستم ران کنم(این قسمت زیاد برام اهمیت نداره ولی باز 100 بار دیگه چک میکنم اگه ایرادی بود توی همین تایپیک خدمتتون عرض می کنم. فعلا گیرم همون بالایی هست)

hamidtmu
سه شنبه 11 آبان 1400, 16:19 عصر
اینم جواب نداد
isnullorempty

336699
سه شنبه 11 آبان 1400, 17:03 عصر
سلام
کد رو به این صورت تغییر بدهید

string columX = Convert.ToString(number[columnIndex++]);

hamidtmu
سه شنبه 11 آبان 1400, 21:05 عصر
سلام
کد رو به این صورت تغییر بدهید

string columX = Convert.ToString(number[columnIndex++]);



با سلام مجدد. من کد نهایی را به صورت زیر نوشتم
if (finalName == "FORM1") {
dt1.Rows.Clear();

foreach (string line in lines)
{


var number = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
DataRow dr1 = dt1.NewRow();
int columnIndex = 0;
for (int i = 1; i <= 8; i++)
{
string columX = Convert.ToString(number[columnIndex++]);
if (!string.IsNullOrWhiteSpace(columX))
{
dr1[i] = columX;
}
else
{

dr1[i] = 0;


}






}


dt1.Rows.Add(dr1);
}
ولی باز ستون خالی را شناسایی نمیکنه و باید یک اسپیس توش باشه تا شناسایی کنه و تبدیل به صفر کنه- اگه توی سلول چیزی نزارم دستور ایف شناساییش نمیکنه
if (!string.IsNullOrWhiteSpace(columX))
کد بالایی هر چی هست از همینجاست

336699
سه شنبه 11 آبان 1400, 21:20 عصر
مشکل از این خط باید باشه
چون یک آرایه ای ایجاد میشه که یکی از ایتم هاش خالی هست

var number = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);


به این صورت هم تست کنید


var number = line.Split(new string[] { " " }, StringSplitOptions.None);

hamidtmu
سه شنبه 11 آبان 1400, 21:55 عصر
مشکل از این خط باید باشه
چون یک آرایه ای ایجاد میشه که یکی از ایتم هاش خالی هست

var number = line.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);


به این صورت هم تست کنید


var number = line.Split(new string[] { " " }, StringSplitOptions.None);



به اینصورت زدم خطا میده و اصلا داده ها ثبت نمیشه. بهترین حالت اون کد قبلی است. حالا احتمال داره چون توی برخی از ستون هام عدد نیست و مثلا اسم هست این مشکلو به وجود بیاره(اینو بگم که ستون مثلا اولش نام و نام خانوادگی هست و بقیه ستون ها مثلا عدد)
یا اینکه نوع فرمت دیتا بیسم که مثلا اینت باشه یا ان وچار و ...

اخه همه چی کده خوبه فقط سلولی که چیزی توش نباشه را نمیشناسه ولی اگه اسپیس بزاری راحت میشناسه و کد کار می کنه

336699
سه شنبه 11 آبان 1400, 22:08 عصر
فایلی که اطلاعات رو میخوانید txt هستش یا csv ویا xlsx

hamidtmu
سه شنبه 11 آبان 1400, 22:19 عصر
فایلی که اطلاعات رو میخوانید txt هستش یا csv ویا xlsx

فایل های مختلف مثل اکسل و سی اس وی را در نهایت به تکست تبدیل می کنم و فایل تکست مورد استفاده قرار می گیره. نمونه دقیق فایل را پیوست کردم براتون-
درست شد. فهمیدم ایراد کار چی بود. نرم افزار جانبی سلول خالی را به nan تبدیل می کرد. سپاس از شما. کد شما کاملا صحیح بود. ممنون از اینکه پابه پا همراهی کردید