PDA

View Full Version : مبتدی: عدم ثبت اطلاعات



saba664
چهارشنبه 19 مهر 1396, 13:33 عصر
من این کد ها رو نوشتم ولی داخل sql هیچی ثبت نمیشه تو دردسر بزرگی افتادم چون برای اداره ام دارم می نویسم و دچار مشکل شدم.


using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.Drawing.Imaging;

namespace final_doctor
{
public partial class sabt : Form
{
SqlConnection cn = new SqlConnection("Data source=172.16.8.4;Initial Catalog=final doctor;Integrated security=true;");
SqlDataAdapter adap = new SqlDataAdapter();
DataTable dt = new DataTable();


public sabt()
{
InitializeComponent();
}




private void button6_Click(object sender, EventArgs e)
{

openFileDialog1.Filter = "jpg Files |*.jpg|PNG FIles |*.png";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
pictureBox1.Image = new Bitmap(openFileDialog1.FileName);

}

private void button1_Click(object sender, EventArgs e)
{
sabt S=new sabt();

SqlCommand cmd = new SqlCommand("INSERT INTO [final doctor]([name],[family],[fhater],[jenseyat],[nezam],[code],[country],[ostan],[shahrestan],[telwork],[mobile],[reshteh],[madrak],[vaestekhdam],[khed1],[khed2],[khed3],[khed4],[heatm],[heatn],[matabd],[matabn],[address],[photo],[parvanehl],[parvaneht],[vazeatf],[vazeatgh]) VALUES (@name,@family,@father,@jenseyat,@nezam,@code,@cou ntry,@ostan,@shahrestan,@telwork,@mobile,@reshteh, @madrak,@vastekhdam,@khed1,@khed2,@khed3,@khed4,@h eatm,@heatn,@matabd,@matabn, @address,@photo,@parvanehl,@parvaneht,@vazeatf,@va zeatgh,0)", cn);
try
{


string name = textBox1.Text;
string family = textBox2.Text;
string father = textBox3.Text;
string jenseyat = comboBox1.Text;
string nezam = textBox4.Text;
string code = textBox5.Text;
string country = textBox10.Text;
string ostan = comboBox2.Text;
string shahrestan = comboBox3.Text;
string telwork = textBox6.Text;
string mobile = textBox7.Text;
string reshteh = comboBox4.Text;
string madrak = comboBox6.Text;
string vaestekhdam = comboBox5.Text;
string khed1 = comboBox9.Text;
string khed2 = comboBox7.Text;
string khed3 = comboBox10.Text;
string khed4 = comboBox8.Text;
Image photo = pictureBox1.Image;
var heatm = checkBox1.Checked;
var heatn = checkBox2.Checked;
var matabd = checkBox5.Checked;
var matabn = checkBox6.Checked;
string address = textBox9.Text;
var parvanehl = checkBox4.Checked;
var parvaneht = checkBox3.Checked;
var vazeatf = radioButton1.Checked;
var vazeatgh = radioButton2.Checked;

cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@family", family);
cmd.Parameters.AddWithValue("@father", father);
cmd.Parameters.AddWithValue("@jenseyat", jenseyat);
cmd.Parameters.AddWithValue("@nezam", nezam);
cmd.Parameters.AddWithValue("@code", code);
cmd.Parameters.AddWithValue("@country", country);
cmd.Parameters.AddWithValue("ostan", ostan);
cmd.Parameters.AddWithValue("@shahrestan", shahrestan);
cmd.Parameters.AddWithValue("@telwork", telwork);
cmd.Parameters.AddWithValue("@mobile", mobile);
cmd.Parameters.AddWithValue("@reshteh", reshteh);
cmd.Parameters.AddWithValue("@madrak", madrak);
cmd.Parameters.AddWithValue("@vaestekhdam", vaestekhdam);
cmd.Parameters.AddWithValue("@khed1", khed1);
cmd.Parameters.AddWithValue("@khed2", khed2);
cmd.Parameters.AddWithValue("@khed3", khed3);
cmd.Parameters.AddWithValue("@khed4", khed4);
cmd.Parameters.AddWithValue("@heatm", heatm);
cmd.Parameters.AddWithValue("@heatn", heatn);
cmd.Parameters.AddWithValue("@matabd", matabd);
cmd.Parameters.AddWithValue("@matabn", matabn);
cmd.Parameters.AddWithValue("@address", address);
cmd.Parameters.AddWithValue("@photo", photo);
cmd.Parameters.AddWithValue("@parvanehl", parvanehl);
cmd.Parameters.AddWithValue("@parvaneht", parvaneht);
cmd.Parameters.AddWithValue("@vazeatf", vazeatf);
cmd.Parameters.AddWithValue("@vazeatgh", vazeatgh);

Bitmap bmp = (Bitmap)pictureBox1.Image;
MemoryStream ms = new MemoryStream();
bmp.Save(ms, bmp.RawFormat);

MessageBox.Show("image saved");
ms.Close();

cn.Open();
cmd.ExecuteNonQuery();
cn.Close();

MessageBox.Show("رکورد با موفقیت ثبت شد ", "ثبت ", MessageBoxButtons.OK, MessageBoxIcon.Information);
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox10.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox9.Text = "";
pictureBox1.Image = null;

}

catch (Exception ex)
{
MessageBox.Show("error");
}
}
}

}

محمد آشتیانی
چهارشنبه 19 مهر 1396, 13:43 عصر
سلام
خطایی که اتفاق میفته چیه؟

توی بلوک Catch ، اینطوری بنویسید تا بشه فهمید چه خطایی داره اتفاق میفته
MessageBox.Show(ex.Message);

saba664
چهارشنبه 19 مهر 1396, 13:49 عصر
سلام
خطایی که اتفاق میفته چیه؟

توی بلوک Catch ، اینطوری بنویسید تا بشه فهمید چه خطایی داره اتفاق میفته
MessageBox.Show(ex.Message);

هیچ خطایی نمیده هیچ علامتی هیچی فقط هیچ کاری نمیکنه یعنی بدون اینکه برنامه خطا بده ثبت نمیکنه این پیام هم نوشتم داخل بلوک اما چیزی نشون نداد.اینجوری نوشتم یعنی بعد از بلوک
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}



به نظرتون کل ترای کچ ها رو پاک کنم خطا رو نشون میده؟

mr.sirwan
چهارشنبه 19 مهر 1396, 13:52 عصر
با سلام، اول از همه اون ابجکت که از فرم جاری ساختین چه کاربردی داره؟ :متفکر:
دوم اینکه شما برای اینکه بدونین روند اجرای برنامه چجوری هستش میتونین breakpoint بذارین و برنامه رو اجرا بگیرین ببینین کدا اصلا اجرا میشن

محمد آشتیانی
چهارشنبه 19 مهر 1396, 13:52 عصر
شما چطور چک میکنید که چیزی ثبت نمیشه در دیتابیس؟

saba664
چهارشنبه 19 مهر 1396, 13:56 عصر
با سلام، اول از همه اون ابجکت که از فرم جاری ساختین چه کاربردی داره؟ :متفکر:
دوم اینکه شما برای اینکه بدونین روند اجرای برنامه چجوری هستش میتونین breakpoint بذارین و برنامه رو اجرا بگیرین ببینین کدا اصلا اجرا میشن

چجوری breakpoint بگیرم؟
آبجکت رو ساختم که ازش استفاده کنم ولی استفاده نشد

saba664
چهارشنبه 19 مهر 1396, 13:57 عصر
شما چطور چک میکنید که چیزی ثبت نمیشه در دیتابیس؟

برنامه رو اجرا میکنم(دیباگ) اطلاعات وارد میکنم دکمه ثبت می زنم هیچ عملکردی انجام نمیده بعد وارد sql میشم روی جدولی که ساختم میرم قسمت Edit رو نگاه میکنم همه اش زده null

محمد آشتیانی
چهارشنبه 19 مهر 1396, 14:00 عصر
اسکریپت دیتابیستون رو بذارید اینجا

saba664
چهارشنبه 19 مهر 1396, 14:03 عصر
اسکریپت دیتابیستون رو بذارید اینجا

USE [final doctor]
GO

/****** Object: Table [dbo].[sabt] Script Date: 10/11/2017 12:33:09 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[sabt](
[name] [nvarchar](50) NULL,
[family] [nvarchar](50) NULL,
[father] [nvarchar](50) NULL,
[jenseyat] [nvarchar](50) NULL,
[nezam] [nvarchar](10) NOT NULL,
[code] [nvarchar](10) NOT NULL,
[country] [nvarchar](10) NULL,
[ostan] [nvarchar](50) NULL,
[shahrestan] [nvarchar](50) NULL,
[telwork] [nvarchar](10) NULL,
[reshteh] [nvarchar](50) NULL,
[madrak] [nvarchar](50) NULL,
[vaestekhdam] [nvarchar](50) NULL,
[khed1] [nvarchar](50) NULL,
[khed2] [nvarchar](50) NULL,
[khed3] [nvarchar](50) NULL,
[khed4] [nvarchar](50) NULL,
[heatm] [nvarchar](10) NULL,
[heatn] [nvarchar](10) NULL,
[matabd] [nvarchar](10) NULL,
[matabn] [nvarchar](10) NULL,
[address] [nvarchar](200) NULL,
[photo] [varbinary](max) NULL,
[parvanehl] [varchar](50) NULL,
[parvaneht] [nvarchar](50) NULL,
[vazeatf] [nvarchar](50) NULL,
[vazeatgh] [nvarchar](50) NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

saba664
چهارشنبه 19 مهر 1396, 14:07 عصر
اینم وقتیه که دکمه ثبت ی بار زدم هیچ پیغام یا خطایی نمیده تو همین حالت میمونه

146686

mr.sirwan
چهارشنبه 19 مهر 1396, 14:07 عصر
دوست عزیز شما یک بار چک کنین که روی ایونت دکمه یک یا همون button1_Click اصلا رفرنسی نوشته شده؟ یا نوشته 0 references

saba664
چهارشنبه 19 مهر 1396, 14:12 عصر
دوست عزیز شما یک بار چک کنین که روی ایونت دکمه یک یا همون button1_Click اصلا رفرنسی نوشته شده؟ یا نوشته 0 references

داخل خاصیت event من اصلا گزینه ایی به اسم refreneces پیدا نکردک که بخوام ببینم صفره یا نه

mr.sirwan
چهارشنبه 19 مهر 1396, 14:18 عصر
داخل خاصیت event من اصلا گزینه ایی به اسم refreneces پیدا نکردک که بخوام ببینم صفره یا نه

146688

بالا سمت چپ ایونت نوشته میشه

saba664
چهارشنبه 19 مهر 1396, 14:33 عصر
146688

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

mr.sirwan
چهارشنبه 19 مهر 1396, 14:49 عصر
شما از ورژن چند ویژوال ستودیو استفاده میکنین؟ فک کنم این امکان از نسخه 2008 به بعد به ویژوال ستودیو اضافه شده :متفکر: در هر حال، راهی نمیمونه جز دیباگ کردن برنامه، یه سر به این لینک بزنین نخوه دیباگ رو توضیح داده

ویرایش: انگاری ویرایشگر سایت مشکل داره، لینک رو به اینصورت نمایش میده: https://مطلب.را.کامل.قرار.دهید/Articles/Article4821.html

saba664
چهارشنبه 19 مهر 1396, 14:57 عصر
شما از ورژن چند ویژوال ستودیو استفاده میکنین؟ فک کنم این امکان از نسخه 2008 به بعد به ویژوال ستودیو اضافه شده :متفکر: در هر حال، راهی نمیمونه جز دیباگ کردن برنامه، یه سر به این لینک بزنین نخوه دیباگ رو توضیح داده


مطلب.را.کامل.قرار.دهید/Articles/Article4821.html

ورژن 2008

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

mr.sirwan
چهارشنبه 19 مهر 1396, 15:01 عصر
ورژن 2008

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

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

saba664
چهارشنبه 19 مهر 1396, 15:09 عصر
خیر، مکان قرارگیری که هیچ مشکلی نداره، کداهم ظاهرا درستن، من فقط به رفرنس مشکوکم

برای 2008 باید برم کدوم قسمت این رفرنیس رو ببینم؟ شرمنده اینقدر سوال می پرسم استرس دارم همه اش میان میگن برنامه چی شد منم مغزم کار نمیکنه

mr.sirwan
چهارشنبه 19 مهر 1396, 15:17 عصر
برای 2008 باید برم کدوم قسمت این رفرنیس رو ببینم؟ شرمنده اینقدر سوال می پرسم استرس دارم همه اش میان میگن برنامه چی شد منم مغزم کار نمیکنه

راستش من تاحالا از نسخه 2012 به پایین رو استفاده نکردم، اینطور که شما میگین حتما نسخه 2008 این قابلیت رو نداره، شما فعلا روی Breakpoint تمرکز کنین، ببینی اصلا کدهای مربوط به دکمه ثبت اجرا میشن یا خیر، کافیه طبق لینکی که گذاشتم اون گلوله قرمز رنگ رو در ابتدای ایونت مربوط به دکمه ثبت بذارین و برنامه رو اجرا کنین، وقتی روی دکمه ثبت کلیک کردین درصورتیکه کدها اجرا بشن، ویژوال ستودیو میره به خطی که breakpoint رو روش قرار دادین با کلید f11 میتونین خط به خط روند اجرای کد هارو ببینین و مقادیر موجود داخل متغیر هارو بررسی کنین.

اما اگه برنامه وارد breakpoint نشه حدس من درسته و اون موقع راهنماییتون میکنم

محمد آشتیانی
چهارشنبه 19 مهر 1396, 15:29 عصر
سلام مجدد
اول از همه از منوی Build یکبار سلوشن رو Clean کنید و دوباره اجرا کنید ، احتمالا اون موقع خطا ها رو خواهید دید (اگر احیانا موثر نبود ، محتویات فولدر Debug پروژتون رو پاک کنید و دوباره پروژه رو Build کنید)

شما انواع اشکالات و خطا ها رو دارید
1- طبق اسکریپتی که فرستادید ، اسم تیبل شما sabt هست و اسم دیتابیستون final doctor، در صورتی که در کوئری insert اسم تیبل رو final doctor نوشتید
2- توی اسکریپت فوق الذکر فیلدی به اسم mobile وجود نداره ، در صورتی که در کوئریتون از این فیلد اسم بردید
3- چند مورد غلط املائی وجود داره ، مثلا اسم فیلد father رو توی کوئریتون غلط نوشتید (بقیه اسم فیلدها رو هم چک کنید ، بعلاوه اسم پارامترها رو با چیزی که توی کوئری نوشتید)
4- توی کوئریتون ، بعد از آخرین پارامتر یک عدد 0 گذاشتید که باعث شده تعداد پارامترها از تعداد فیلد ها بیشتر بشه ، بنابراین اون اضافه هست
5- این مورد مشکلی پیش نمیاره ، اما ترجیحا در اسم دیتابیستون از Space استفاده نکنید. (مثلا به اینصورت تغییر نام بدید FinalDoctor)
6- روش ثبت تصویر هم در دیتابیس غلطه
به اینصورت اصلاح کنید
این بلوک کد رو ابتدای Try قرار بدید
byte[] photo_aray;

using (var ms = new MemoryStream())
{
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
photo_aray = new byte[ms.Length];
ms.Position = 0;
ms.Read(photo_aray, 0, photo_aray.Length);
}

توی پارامترهاتون پارامتر photo رو به این شکل اصلاح کنید
cmd.Parameters.AddWithValue("@photo", photo_aray);


این کدها رو حذف کنید
Image photo = pictureBox1.Image;.
.
.
Bitmap bmp = (Bitmap)pictureBox1.Image;
MemoryStream ms = new MemoryStream();
bmp.Save(ms, bmp.RawFormat);
MessageBox.Show("image saved");
ms.Close();



این موارد رو انجام بدید قاعدتا باید مشکلتون حل بشه

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

موفق باشید.

saba664
شنبه 22 مهر 1396, 13:58 عصر
سلام مجدد
اول از همه از منوی Build یکبار سلوشن رو Clean کنید و دوباره اجرا کنید ، احتمالا اون موقع خطا ها رو خواهید دید (اگر احیانا موثر نبود ، محتویات فولدر Debug پروژتون رو پاک کنید و دوباره پروژه رو Build کنید)

شما انواع اشکالات و خطا ها رو دارید
1- طبق اسکریپتی که فرستادید ، اسم تیبل شما sabt هست و اسم دیتابیستون final doctor، در صورتی که در کوئری insert اسم تیبل رو final doctor نوشتید
2- توی اسکریپت فوق الذکر فیلدی به اسم mobile وجود نداره ، در صورتی که در کوئریتون از این فیلد اسم بردید
3- چند مورد غلط املائی وجود داره ، مثلا اسم فیلد father رو توی کوئریتون غلط نوشتید (بقیه اسم فیلدها رو هم چک کنید ، بعلاوه اسم پارامترها رو با چیزی که توی کوئری نوشتید)
4- توی کوئریتون ، بعد از آخرین پارامتر یک عدد 0 گذاشتید که باعث شده تعداد پارامترها از تعداد فیلد ها بیشتر بشه ، بنابراین اون اضافه هست
5- این مورد مشکلی پیش نمیاره ، اما ترجیحا در اسم دیتابیستون از Space استفاده نکنید. (مثلا به اینصورت تغییر نام بدید FinalDoctor)
6- روش ثبت تصویر هم در دیتابیس غلطه
به اینصورت اصلاح کنید
این بلوک کد رو ابتدای Try قرار بدید
byte[] photo_aray;

using (var ms = new MemoryStream())
{
pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
photo_aray = new byte[ms.Length];
ms.Position = 0;
ms.Read(photo_aray, 0, photo_aray.Length);
}

توی پارامترهاتون پارامتر photo رو به این شکل اصلاح کنید
cmd.Parameters.AddWithValue("@photo", photo_aray);


این کدها رو حذف کنید
Image photo = pictureBox1.Image;.
.
.
Bitmap bmp = (Bitmap)pictureBox1.Image;
MemoryStream ms = new MemoryStream();
bmp.Save(ms, bmp.RawFormat);
MessageBox.Show("image saved");
ms.Close();



این موارد رو انجام بدید قاعدتا باید مشکلتون حل بشه

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

موفق باشید.

درود بر شما ممنون واقعا مشکل حل شد

در رابطه با بانک هم از اساتید سوال کردم ممنون بابت راهنمایی و وقتی که در اختیارم قرار دادین واقعا استادی برازنده ی افرادی مثل شماست.