PDA

View Full Version : مشکل این کد کجاست؟



samaram
جمعه 02 بهمن 1388, 21:10 عصر
سلام. دو تا سوال دارم. اول اینکه:
ببینید من این کد رو برای حذف یه سطر از گراید ویو نوشتم:


private void button2_Click_1(object sender, EventArgs e)
{
common .sh = (int)dataGridView1.CurrentRow.Cells[1].Value ;
DialogResult code;
code = MessageBox.Show(" ", " ", MessageBoxButtons.YesNo);
if (code == DialogResult.Yes)
{

SqlCommand cmd = new SqlCommand("Delete From TB_customer Where sh=@ssh", con);
cmd.Parameters.AddWithValue("@ssh", common .sh );

con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show(" ");
}
}

اما موقع اجرا این خطا رو میده :


Syntax Erorr Near "_"

سوال دیگه هم اینه که میخوام روی یه مقدار از فیلدهای بانکم یه شرطو بررسی کنم. مثلا میخوام بگم اگه مقدار فلان فیلد x هست این دستور رو اجرا کن. میشه بگید چطور باید بنویسم؟

slashslash2009
جمعه 02 بهمن 1388, 21:17 عصر
SqlCommand cmd1 = new SqlCommand("Delete from table where name=@name", con);
SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
da1.SelectCommand.Parameters.Add("@name", SqlDbType.NChar).Value = comboBox1.Text;
SqlCommandBuilder cbd1 = new SqlCommandBuilder(da1);
DataTable dt1 = new DataTable();
da1.Fill(dt1);

neda_dela
جمعه 02 بهمن 1388, 23:14 عصر
سلام. دو تا سوال دارم. اول اینکه:
ببینید من این کد رو برای حذف یه سطر از گراید ویو نوشتم:


privatevoid button2_Click_1(object sender, EventArgs e)
{
common .sh = (int)dataGridView1.CurrentRow.Cells[1].Value ;
DialogResult code;
code = MessageBox.Show(" ", " ", MessageBoxButtons.YesNo);
if (code == DialogResult.Yes)
{

SqlCommand cmd = newSqlCommand("Delete From TB_customer Where sh=@ssh", con);
cmd.Parameters.AddWithValue("@ssh", common .sh );

con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show(" ");
}
}

اما موقع اجرا این خطا رو میده :


Syntax Erorr Near "_"

سوال دیگه هم اینه که میخوام روی یه مقدار از فیلدهای بانکم یه شرطو بررسی کنم. مثلا میخوام بگم اگه مقدار فلان فیلد x هست این دستور رو اجرا کن. میشه بگید چطور باید بنویسم؟
اسم تیبل شما _ داره ببین توی [] قرارش بده ببین درست میشه

SqlCommand cmd = newSqlCommand("Delete From [TB_customer] Where sh=@ssh", con);
جواب سوال 2:
خب یه وقت هست که مقدار این فیلد رو می خوای از داخل گرید بررسی کنی یه وقت هم هست که با دستور اس کیو ال می خای بررسی کنی:
برای حالت اول مثال:


if (dataGridView1.CurrentRow.Cells[1].Value.ToString()=="xxx")

یا


if (dataGridView1.CurrentRow.Cells[1].Value.ToString()==textBox1.Text)

برای حالت دوم مثال:


com.CommandText = "select * from [st-result] where id=" + a + " and sath like N'%" + sa + "%'" + " and term like N'%" + term +"%'" + " and years like N'%" + year+"%'";
com.Connection = myConnection;
com.CommandType = CommandType.Text;
da.SelectCommand = com;
da.Fill(dt);
dataGridView1.DataSource = dt;

a و sa و term و year متغیر هایی هستند که من قبلا توشون مقادیر مورد نظرم رو ریختم.

samaram
یک شنبه 04 بهمن 1388, 22:25 عصر
جواب سوال 2:



com.CommandText = "select * from [st-result] where id=" + a + " and sath like N'%" + sa + "%'" + " and term like N'%" + term +"%'" + " and years like N'%" + year+"%'";
com.Connection = myConnection;
com.CommandType = CommandType.Text;
da.SelectCommand = com;
da.Fill(dt);
dataGridView1.DataSource = dt;

a و sa و term و year متغیر هایی هستند که من قبلا توشون مقادیر مورد نظرم رو ریختم.
درسته همین منظورم بود. ولی ببنید من فقط میخوام روی اون فیلدی که با select بدست میاد مقایسه انجام بدم. یعنی میخوام بگم اگه "نتیجه" ی select ، مثلا x هست فلان پیغام رو به کاربر بده. این "نتیجه" رو با چه دستوری بنویسم. محتویات Select کجا ریخته میشه و چطور می تونم ازش استفاده کنم؟ شرمنده چندان مهارت ندارم.

مهدی رحیم زاده
یک شنبه 04 بهمن 1388, 23:37 عصر
در انتخاب عناوین دقت نمایید .
با تشکر

slashslash2009
دوشنبه 05 بهمن 1388, 01:08 صبح
textbox1.text=dt.rows[0][x].tostring()به جای x شماره سلول یا کلومن فیلدتو بزار از صفر شروع میشه

neda_dela
سه شنبه 06 بهمن 1388, 23:40 عصر
درسته همین منظورم بود. ولی ببنید من فقط میخوام روی اون فیلدی که با select بدست میاد مقایسه انجام بدم. یعنی میخوام بگم اگه "نتیجه" ی select ، مثلا x هست فلان پیغام رو به کاربر بده. این "نتیجه" رو با چه دستوری بنویسم. محتویات Select کجا ریخته میشه و چطور می تونم ازش استفاده کنم؟ شرمنده چندان مهارت ندارم.
ببین پس بهتره که از select استفاده نکنی شما توی فرمت یه دیتا گرید ویو بذار و اون رو به بانکت وصل کن.
بعد مثلا فرض کن که اون فیلد مورد نظرت در ستون دوم گرید قرار داره باید شرط بذاری که حتما کاربر یه ردیف از گرید رو انتخاب کرده باشه اگه انتخاب کرد بعد اون شرط مورد نظرت رو بذار :


if (dataGridView1.SelectedRows.Count > 0)
{
if (te0xtBox6.Text == dataGridView1.SelectedRows[0].Cells[2].Value.ToString())
{
//دستوراتی که در صورت برقراری شرط می خوای اجرا بشه
}
}
else
MessageBox.Show("لطفا یک ردیف از لیست را انتخاب نمایید ");

موفق باشی:لبخندساده:

samaram
جمعه 09 بهمن 1388, 18:53 عصر
دوستان شما منظور سوال دوم منو متوجه نمیشید.
واضح تر میگم. من تو جدول sql یه فیلد دارم بنام modem فرض کنید میخوام بگم "اگر" modem برابر false هست به کاربر پیغام بده "مودمی تعریف نشده است."
کد این رو چطور بنویسم؟

slashslash2009
جمعه 09 بهمن 1388, 21:13 عصر
خوب دستور select رو بنویس دیگه اگر modem=false

hakelberfin
شنبه 10 بهمن 1388, 00:56 صبح
با سلام
1.سعی کن خوانایی کدت رو بالا ببر
2.برای عملیات Insert , Delete , Update از SP استفاده کن و در SP عواملی که برای امنیت پایگاه دادت لازمه بررسی کن
3.حتما SQL Server Books Online رو هم بخون.
شما برای اینکار دو روش دارین
1. برای پروسیجری که در آن از Select استفاده کردین براش مقدار برگشتی تعریف کنید.
2.برای آن پروسیجر پارامتر خروجی تعریف کنید. در داخل پروسیجر اونو مقداردهی کنید و بعد از اجرای آن پروسیجر در سمت C#‎‎ از اون مقدار استفاده کنید.
من روش دوم رو بهتر میدونم.اینم مثال:
این کد در سمت C#‎‎


if (MessageBox.Show("DoYou Want To Continue, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
this.SqlTransaction = this.SqlConnection.BeginTransaction();
System.Data.SqlClient.SqlCommand SqlCommand = new SqlCommand();
SqlCommand.Connection = this.SqlConnection;
SqlCommand.Transaction = this.SqlTransaction;
SqlCommand.CommandType = CommandType.StoredProcedure;
SqlCommand.CommandText = "DeleteUser";
#region Set Parameters
SqlCommand.Parameters.Add("@UserID", SqlDbType.Int).Value = int.Parse(this.dataGridViewUser["ColumnUserID", this.dataGridViewUser.CurrentRow.Index].Value.ToString());
SqlCommand.Parameters.Add("@SP_Result", SqlDbType.VarChar, 32).Direction = ParameterDirection.Output;
#endregion
SqlConnection.Open();
SqlCommand.ExecuteNonQuery();
SqlConnection.Close();
if (SqlCommand.Parameters["@SP_Result"].Value.ToString() == "Success")
{
this.SqlTransaction.Commit();
}
else
{
switch (SqlCommand.Parameters["@SP_Result"].Value.ToString())
{
case"Dependency":
MessageBox.Show("Error Message");
break;

}
this.SqlTransaction.Rollback();
}


اینم کد SP :



ALTER PROCEDURE dbo.DeleteUser
@UserID AS INT,
@SP_Result VARCHAR(32) OUTPUT
AS
BEGIN
SELECT * FROM [User] WHERE UserID=@UserID
IF(@@ROWCOUNT = 0)
BEGIN
SET @SP_Result = 'Error'
RETURN
END



DELETE FROM [User] WHERE UserID=@UserID

IF(@@ERROR = 0)
SET @SP_Result = 'Success'
ELSE
SET @SP_Result = 'Error'

END


در مورد SELECT شما:


DECLARE @Modem AS VARCHAR
SELECT @Modem = Modem FROM [TabelName] WHERE ID=@ID
IF @Modem = 'FALSE'
SET @SP_Result = 'Error'
ELSE
SET @SP_Result = 'Success'