|
|
|
C# Error เมื่อใช้ ExecuteNonQuery...Violation of PRIMARY KEY constraint 'PK_Masterdata'. Cannot insert duplicate key in object 'dbo.datapeople' |
|
|
|
|
|
|
|
Error เมื่อใช้ ExecuteNonQuery แต่ข้อมูลเข้า
พอไม่ใช้ ไม่ Error ข้อมูลเข้าปกติดี
ใช้ windows7 VC#2008 SQL2005 Expess
Code (C#)
{
//เพิ่มข้อมูลในฐานข้อมูล
string strConn = "Data Source = .\\SqlExpress;Initial Catalog=datatest;Integrated Security=true";
Conn = new SqlConnection();
if (Conn.State == ConnectionState.Open)
{
Conn.Close();
}
Conn.ConnectionString = strConn;
Conn.Open();
DataSet dat = new DataSet();
SqlCommand cmd;
SqlDataAdapter ad;
string sret = "insert into datapeople(IDsick,IDpeople,firsname,lastname,address,mou,street,tambom,aumpuer,province,Birthday,age,sex)"+
"values(@add00,@add1,@add2,@add3,@add4,@add5,@add6,@add7,@add8,@add9,@add10,@add11,@add12)";
cmd = new SqlCommand(sret, Conn);
cmd.Parameters.AddWithValue("add1", maskedTextBox5.Text);
cmd.Parameters.AddWithValue("add2", textBox9.Text);
cmd.Parameters.AddWithValue("add3", textBox19.Text);
cmd.Parameters.AddWithValue("add4", textBox10.Text);
cmd.Parameters.AddWithValue("add5", textBox11.Text);
cmd.Parameters.AddWithValue("add6", textBox12.Text);
cmd.Parameters.AddWithValue("add7", textBox13.Text);
cmd.Parameters.AddWithValue("add8", textBox14.Text);
cmd.Parameters.AddWithValue("add9", textBox15.Text);
cmd.Parameters.AddWithValue("add10", maskedTextBox6.Text);
cmd.Parameters.AddWithValue("add11", textBox17.Text);
cmd.Parameters.AddWithValue("add00", textBox18.Text);
if(radioButton13.Checked == true)
{
cmd.Parameters.AddWithValue("add12","Male");
}
else if (radioButton14.Checked == true)
{
cmd.Parameters.AddWithValue("add12", "Female");
}
else
{
MessageBox.Show("โปรดกลับไปเลือกเพศ");
Conn.Close();
}
ad = new SqlDataAdapter(cmd);
ad.Fill(dat, "TTL");
cmd.ExecuteNonQuery();
Conn.Close();
MessageBox.Show("สำเร็จ");
}
Tag : - - - -
|
|
|
|
|
|
Date :
2010-06-02 19:48:01 |
By :
thaic |
View :
7684 |
Reply :
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Error อะไรครับ ลองใข้ Tool Debug หรือ ครอบด้วย function try{} ครับ
|
|
|
|
|
Date :
2010-06-02 20:56:03 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
cmd.Parameters.AddWithValue("add1", maskedTextBox5.Text);
....
....
cmd.Parameters.AddWithValue("add00", textBox18.Text);
เป็น
Code (C#)
cmd.Parameters.AddWithValue("@add1", maskedTextBox5.Text);
....
....
cmd.Parameters.AddWithValue("@add00", textBox18.Text);
|
|
|
|
|
Date :
2010-06-02 22:13:16 |
By :
blurEyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
Violation of PRIMARY KEY constraint 'PK_Masterdata'. Cannot insert duplicate key in object 'dbo.datapeople'.
The statement has been terminated.
Error แบบ นี้เลย
|
|
|
|
|
Date :
2010-06-02 23:20:49 |
By :
thaic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไปดู PK_Masterdata ว่าใช้ field ไหนเป็นหลักค่ะ
error แสดงว่า มีค่า primarykey ซ้ำกัน
|
|
|
|
|
Date :
2010-06-03 00:06:57 |
By :
blurEyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยังไม่มีข้อมูลเลย ครับ ไม่ซ้ำแน่นอน
IDsick >> คียหลัก
|
|
|
|
|
Date :
2010-06-03 00:28:25 |
By :
thaic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบเองล่ะกัน - -* ไปถามคนใช้ทำงานจริง เขาบอกว่า
Code (C#)
SqlCommand cmd;
SqlDataAdapter ad;
2อันนี้ ใช้อย่างใด อย่างหนึ่งผมก็ไม่รู้ทำตามหนังสือ อ่ะเนอะ
ที่นี้ เราไม่จำเป็นต้องใส่ cmd.ExecuteNonQuery(); เพราะ
ผมใช้ SqlDataAdapter ไม่จำเป็นต้องเปิดและปิด Connection "Adapter" มันทำด้วยตัวเองอยู่แล้ว
Code (C#)
SqlDataAdapter
ad.Fill(dat, "TTL");
ถ้าเกิดผมใส่ cmd.ExecuteNonQuery(); เข้าไปมันจะ Error เพราะมันส่งข้อมูลซ้ำซ้อนเลยดูเหมือน ใส่ ข้อมูล คีย์หลักซ้ำ
แต่ถ้าใช้ command อย่างเดียวต้องใช้ cmd.ExecuteNonQuery(); ไม่เช่นนั้นไม่มีเกิดผลอะไรกับ ข้อมูลในฐานข้อมูล เลย
|
|
|
|
|
Date :
2010-06-03 18:50:47 |
By :
thaic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำไรอะ จะใช้ dataadapter insert ข้อมูลเหรอ หรือจะ query ข้อมูล เอาให้แน่
ใช้ dataadapter เพื่อ query ข้อมูล
DataSet Ds = new DataSet();
string strConn = "Data Source = .\\SqlExpress;Initial Catalog=datatest;Integrated Security=true";
SqlConnection Conn = new SqlConnection(strConn);
string strComm = "Select [ID], [Name] From [Friend] Where [Birthday]=@Birthday";
SqlCommand Comm = new SqlCommand(strComm, Conn);
Comm.AddWithValue("@Birthday", DateTime.ParseExact("3/6/2010", "d/M/yyyy", CultureInfo.InvariantCulture);
SqlDataAdapter dataAdapter = new SqlDataAdapter();
dataAdapter.SelectCommand = Comm;
dataAdapter.Fill(Ds, "Friend");
ใช้ dataadapter เพื่อ insert ข้อมูล
//สำคัญ DataSet ต้องมีข้อมูล
DataSet Ds = new DataSet();
DataTable Dt = new DataTable("Friend");
Dt.Columns.Add("ID", System.Type.GetType("System.Int32"));
Dt.Columns.Add("Name", System.Type.GetType("System.String"));
Dt.Columns.Add("Birthday", System.Type.GetType("System.DateTime"));
for (int i = 1; i < 10; i++)
{
DataRow Dr = Dt.NewRow();
Dr["ID"] = i;
Dr["Name"] = string.Format("tungman{0}", i.ToString());
Dr["Birthday"] = DateTime.Now;
Dt.Rows.Add(Dr);
}
string strConn = "Data Source = .\\SqlExpress;Initial Catalog=datatest;Integrated Security=true";
SqlConnection Conn = new SqlConnection(strConn);
string strComm = "Insert Into [Friend] ([ID], [Name], [Birthday]) Values (@ID, @Name, @Birthday)";
SqlCommand Comm = new SqlCommand(strComm, Conn);
Comm.Parameters.Add("@ID", SqlDataType.Int, 4, "ID");
Comm.Parameters.Add("@Name", SqlDataType.NVarChar, 50, "Name");
Comm.Parameters.Add("@Birthday", SqlDataType.SmallDateTime, 4, "Birthday");
SqlDataAdapter dataAdapter = new SqlDataAdapter();
dataAdapter.InsertCommand = Comm;
dataAdapter.Update(Ds, "Friend");
|
|
|
|
|
Date :
2010-06-03 19:53:01 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
insert ซิครับ query insert - -* คิวรี หมายถึงกระบวนการการกระทำ เพิ่ม ลบ อัพเดท เลือกดู ไม่ใช่เหรอ
|
|
|
|
|
Date :
2010-06-03 22:44:10 |
By :
thaic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอโทษค่ะที่ตอบช้ามีธุระวุ่นวายไปหน่อย งานเข้าหลายอย่างพร้อมๆกันค่ะ
ครั้งแรกผิดเองที่ไม่ได้ดู ท่อนล่างมองแต่ SQL COMMAND กับ Sysntax แบบ Parameter
พอดูท่อนล่างก็เป็นอย่างที่คุณบอกค่ะ มีการ EXECUTE SQL สองครั้งจาก
DataAdapter ครั้งนึงแล้วก็ EXECUTENONQUERY
เพราะเป็นการ INSERT และมี PRIMARY KEY น่าจะเกิดปัญหาดังกล่าวค่ะ
ทางแก้สั้นๆ คือตัดบรรทัด ที่เกี่ยวกับ DataAdapter ออกให้หมด
ตามที่คนใช้งานจริงที่คุณไปสอบถามมาแล้วแนะนำค่ะ
ขอขยายผลเรื่องนี้นะคะ ทราบว่าคุณทำตามหนังสือตัวอย่างที่ให้มา
โดยจะการใช้ SQL STATEMENTกับ Method EXECUTENONQUERY
และ ชุด Object DataAdapter เพื่อจะ สร้าง Dataset หรือ DataTable ออกมา
วัตถุประสงค์ชอง 2 ชุดคำสั่งนี้แตกต่างกัน
โดยปกติ EXECUTENONQUERY เรามักจะใช้กับ SQL COMMAND พวก
DATA MANIPULATION STATEMENT : INSERT ,UPDATE ,DELETE
หรือ DATA DEFINITION STATEMENT ( CREATE, ALTER, DROP ETC. )
เพราะนิยามของ Method นี้มีสั้นๆ คือ จะทำการ Execute Sql statement
ของ Connection object ที่ติดต่ออยู่ โดยจะ return ค่ากลับมาเป็น Int
ซึ่งเป็นจำนวนของ แถวหรือจำนวน record ที่ได้รับผลกระทบจากการ
execute sql state ดังกล่าว
https://www.thaicreate.com/asp.net/asp.net-executenonquery.html
(Errata นิดนึง พี่วินค่ะมัน return total row effected number ค่ะ )
มาดูส่วน DataAdapter กัน
Object นี้จะเป็น object ที่เกี่ยวพันกับ Database provider เช่น
MSSQL Provider จะใช้ SqlDataAdapter
MySQL Provider จะใช้ MySqlDataAdapter
หน้าที่ของ object นี้คือ จัดเก็บชุด Command object
ที่เชื่อมต่อ database หรือ connection
เพื่อเอามา filled ใหักับ datatable หรือ dataset
เพื่อเอาผลที่ได้นั้นมาใช้ใน .Net framework อีกทีค่ะ
ยิ่งเขียนก้อยิ่งจะยาว นี่ก้อดึกละ ขอจบสะตรงนี้เลยนะคะ
|
|
|
|
|
Date :
2010-06-04 01:24:39 |
By :
blurEyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เดียวดำเนินการแก้ไขก่อนครับ
|
|
|
|
|
Date :
2010-06-04 06:27:36 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ่านของ blueeyes แล้วเข้าใจแบบงงๆ เอ๊ะยังไง
ในความเข้าใจของผม ผมจะแบ่งการติดต่อฐานข้อมูลเป็น 2 ประเภท คือ
1. แบบ connection
จะต้อง เปิด / ปิด connection ก่อนจะ execute command โดย
select จะใช้ executereader
select scalar จะใช้ executescalar
insert update delete create drop จะใช้ executenonquery
ซึ่งโดยปกติ ผมจะใช้สำหรับ query scalar หรือ create drop table
หรือ update delete หรือ insert แบบ record เดียว
2. แบบ connectionless
วิธีนี้ไม่ต้อง เปิด / ปิด connection แต่ต้องใช้ dataadapter เป็นตัวกลาง
ติดต่อ ใช้งานประเภทไม่อยากรบกวน database server บ่อยๆ
คือ query ข้อมูลมาปู้ยี่ปู้ยำใน memory table (พวก dataset datatable)
เสร็จแล้วค่อย insert update delete กลับไปที่ฐานข้อมูลทีเดียว
ผิดถูกอย่างไรขออภัย พอดีเป็นศิษย์ไม่มีครู ศึกษาวิทยายุทธเอง บางทีธาตุไฟเข้าแทรกเหมือนกัน
|
|
|
|
|
Date :
2010-06-04 09:10:16 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
น้องเค้าเก่งมากครับ
|
|
|
|
|
Date :
2010-06-04 09:45:06 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อืม เก่งดิ ยกให้เลยคนนี้ ความรู้แบบนี้หาไม่ได้ในห้องเรียนนะเนี่ย
หรือว่าน้องเขามีปลั๊กแบบ นีโอ ณ แมตทรกซ์
|
|
|
|
|
Date :
2010-06-04 09:58:36 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แหง๋น่อ พราวอ่านไว้สอบนี่ ก้อประมาณนี้
ท่องเจื้อยแจ้วเป็นนกแก้วนกขุนทองไปเรื่อย
ไม่ใช่ความเข้าใจที่เกิดจากการปฏิบัติค่ะ
dataadater เป้นประมาณ buffer ที่เก็บ command object
เพื่อจะเอาไว้สร้าง datatable กะ dataset
เป็นข้อต่อของ database provider กับ .net framework
จริงๆมันมีโมเดลมาอธิบายนะคะ แต่คงไม่มีครัยอยากดูหรอก
ออกจะน่าเบื่อทฤษฎีเยอะค่ะ
ที่ไม่สรุปสั้นๆ ให้ เพราะดูเหมือนคุณคนนั้น
เพิ่งจะมาเขียน ยังต้องใช้หนังสิออ่านเปรียบเทียบ
ส่วนมากหนังสือภาษาไทยจะไม่มีส่วนที่เป็น นิยาม
กับทฤษฎีให้ เลยขยายส่วนนี้
ปกติที่เป้นปัญหาคือ เอา code มาใช้
และมักจะข้ามส่วนที่มาที่ไปมาจากไหนเพื่ออะไร
ทำให้บางคนจะติดๆขัดๆค่ะ
วันหลังจะทำส่วนบรรณานุกรมให้ว่าเอามาจากเล่มไหนค่ะ
อีกอย่าง BLUREYES ไม่ใช่ BLUEEYES ค่าา
|
|
|
|
|
Date :
2010-06-04 11:02:52 |
By :
blurEyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตัว r เหรอ อิอิ โทษทีๆ
|
|
|
|
|
Date :
2010-06-04 11:22:32 |
By :
ตังค์แมน |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โอ้ โห ความรู้ไหลมามากมาย เก็บเข้า สมองทันไหมเนี่ย ขอบคุณพี่ๆ มากครับ
แต่ พอเราจะตั้งเงื่อนไขตรวจสอบ ข้อมูลไม่ให้ซ้ำกันที่นี้เราต้องเอา จากตัวไหนไปตรวจสอบ หรือจะให้ มี ทั้งคำสั่ง insert และ select อยู่ใน private ด้วยกัน มาตรวจว่าซ้ำไหมแล้วค่อยเอาไป insert ตรงนี้นั่งคิดมา 2วันแล้ว คิดไม่ออก จริงๆ แนะนำตัวอย่างให้ดูหน่อย ครับท่านพี่
|
|
|
|
|
Date :
2010-06-04 13:36:25 |
By :
thaic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่เก่งอะไรหรอกค่า
พี่ๆเพื่อนๆที่ทราบเรื่องนี้ ที่ชำนาญเรื่องนี้น่าจะมีหลายคน
เพียงแต่ว่าจะมีเวลามาตอบให้หรือเปล่าเท่านั้นเอง
ตอนนี้มหาลัยเริ่มเปิด เอกชน - รัฐ ก็เริ่มทำงานตามปกติแล้ว
น่าจะเริ่มๆยุ่งกันทีละคนๆแลัวมังคะ
วิธีเลี่ยงปัญหา primary key โดยปกติจะไปกำหนดให้ field
ที่ใช้เป็น pk ให้ เพิ่มค่าอัตโนมัติค่ะ (auto increasement)
ส่วนเวลา insert ก็ข้าม field นี้เลย
database engine จะสร้างขึ้นมาให้เองค่ะ
เช่น #table1 มี field( A ,B ,C ) มี A เป็น PK แบบ auto increasement
INSERT STATEMENT จะเป็น
INSERT [#table1] (B, C) VALUES ( VALUE_B ,VALUE_C ) ค่ะ
ส่วนวิธีกำหนด ตามรูปด้านล่างเลยค่ะ
แต่ที่ใช้กันตอนนี้จะ generate id มาใช้เองค่ะ
ซึ่งวิธีทั้งสองแบบมีข้อดีข้อเสียแตกต่างกันค่ะ
ถ้าเป็นการฝึกปฎิบัติแนะนำให้ใช้วิธีแรกค่ะ
|
|
|
|
|
Date :
2010-06-04 18:03:20 |
By :
blurEyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เช็คซ้ำก่อน insert ครับ
Code (C#)
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.SqlClient"%>
<%@ Page Language="C#" Debug="true" %>
<script runat="server">
SqlConnection objConn = new SqlConnection();
SqlCommand objCmd = new SqlCommand();
String strConnString,strSQL;
void Page_Load(object sender,EventArgs e)
{
strConnString = "Server=localhost;UID=sa;PASSWORD=;database=mydatabase;Max Pool Size=400;Connect Timeout=600;";
objConn.ConnectionString = strConnString;
objConn.Open();
}
void btnSave_Click(Object sender , EventArgs e)
{
int intNumRows;
strSQL = "SELECT COUNT(*) FROM customer WHERE CustomerID = '"+ this.txtCustomerID.Text +"' ";
objCmd = new SqlCommand(strSQL, objConn);
intNumRows = Convert.ToInt32(objCmd.ExecuteScalar());
if(intNumRows > 0)
{
this.pnlAdd.Visible = false;
this.lblStatus.Visible = true;
this.lblStatus.Text = "CustomerID already exists.";
}
else
{
strSQL = "INSERT INTO customer (CustomerID,Name,Email,CountryCode,Budget,Used) " +
" VALUES " +
" ('" + this.txtCustomerID.Text + "','" + this.txtName.Text + "','" + this.txtEmail.Text + "', " +
" '" + this.txtCountryCode.Text + "','" + this.txtBudget.Text + "','" + this.txtUsed.Text + "')";
objCmd = new SqlCommand();
objCmd.Connection = objConn;
objCmd.CommandText = strSQL;
objCmd.CommandType = CommandType.Text;
this.pnlAdd.Visible = false;
try
{
objCmd.ExecuteNonQuery();
this.lblStatus.Text = "Record Inserted";
this.lblStatus.Visible = true;
}
catch (Exception ex)
{
this.lblStatus.Visible = true;
this.lblStatus.Text = "Record can not insert Error ("+ ex.Message +")";
}
}
}
void Page_UnLoad()
{
objConn.Close();
objConn = null;
}
</script>
<html>
<head>
<title>ThaiCreate.Com ASP.NET - SQL Server</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Panel id="pnlAdd" runat="server">
<table width="353" border="1">
<tbody>
<tr>
<td width="102">
<asp:Label id="lblCustomerID" runat="server" text="CustomerID"></asp:Label></td>
<td width="235">
<asp:TextBox id="txtCustomerID" runat="server" Width="79px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<asp:Label id="lblName" runat="server" text="Name"></asp:Label></td>
<td>
<asp:TextBox id="txtName" runat="server" Width="177px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<asp:Label id="lblEmail" runat="server" text="Email"></asp:Label></td>
<td>
<asp:TextBox id="txtEmail" runat="server" Width="155px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<asp:Label id="lblCountryCode" runat="server" text="CountryCode"></asp:Label></td>
<td>
<asp:TextBox id="txtCountryCode" runat="server" Width="38px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<asp:Label id="lblBudget" runat="server" text="Budget"></asp:Label></td>
<td>
<asp:TextBox id="txtBudget" runat="server" Width="76px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<asp:Label id="lblUsed" runat="server" text="Used"></asp:Label></td>
<td>
<asp:TextBox id="txtUsed" runat="server" Width="76px"></asp:TextBox>
</td>
</tr>
</tbody>
</table>
<br />
<asp:Button id="btnSave" onclick="btnSave_Click" runat="server" Text="Save"></asp:Button>
<br />
</asp:Panel>
<asp:Label id="lblStatus" runat="server" visible="False"></asp:Label>
</form>
</body>
</html>
|
|
|
|
|
Date :
2010-06-04 18:07:12 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณทุกท่านครับเดี๋ยวลองดูครับ แบบว่านี้คือ โปรเจ็คที่จะส่งในเดือนนี้เลยต้องรีบกันหน่อย เรียนมาได้เท่านี้แหละ อ. เขาสอนเราแค่นี้นอกนั้นต้องศึกษาเอง ไม่อยากพูดเลยว่าเรียนเอากระดาษแผ่นเดียว มาศึกษาในอินเทอร์เน็ต ยังได้เยอะกว่าอีก
|
|
|
|
|
Date :
2010-06-04 19:36:51 |
By :
thaic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เรียนระดับนี้แล้วเขาไม่สอนกันหรอก เขาให้ศึกษาเอง สอนนิดๆ หน่อยๆ นั่นน่ะใจดีแล้ว
สมัยฉันปีหนึ่ง เรียนโปรแกรมเบื้องต้นด้วย turbo c อาจารย์สอนพื้นๆ ปกติๆ แต่งานแกให้
ทำเกม คิดดูแล้วกันให้ทำเกมด้วย turbo c oop ก็ไม่ได้เรียน memory 64k ของ dos
ให้ทำเกม นรกชัดๆ
|
|
|
|
|
Date :
2010-06-04 23:22:00 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
นรกชัดเจนมาก
|
|
|
|
|
Date :
2010-06-04 23:50:05 |
By :
thaic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เออ คือ ว่าทำตรวจไม่ให้ซ้ำกันได้แล้วทีนี้ เราจะตรวจยังไงให้ ชื่อ-นามสกุล ไม่ให้ซ้ำกันทั้ง 2อย่างใน บรรทัดเดียวกัน
...กะว่าจะไม่นอนถ้าทำไม่ได้แต่มันง่วงจัดคิดไม่ออก ตัวเปรียบเทียบมันน้อยไปน่ะผมว่า ! && || ^ != == <= >= >= <= < > อยากเยอะกว่านี้อ่ะ....ข้ออ้างคนโง่ T_T
^^ ช่วยเอาตัวอย่างการตรวจสอบ ชื่อและนามสกุล ซ้ำให้ดูด้วยครับ ท่าน ขอบคุณครับ
|
|
|
|
|
Date :
2010-06-05 01:17:31 |
By :
thaic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
System.Text.StringBuilder cmdBuilder = new System.Text.StringBuilder();
cmdBuilder.AppendLine("DECLARE @TOTAL_REC AS INT ;") ;
cmdBuilder.AppendLine("SELECT @TOTAL_REC = COUNT(IDSICK) ") ;
cmdBuilder.AppendLine("FROM datapeople ") ;
cmdBuilder.AppendLine("WHERE (FIRSTNAME=@add2) AND (LASTNAME=@add3); ") ;
cmdBuilder.AppendLine("IF (@TOTAL_REC = 0) ") ; // UNIQUE NAME CHECKED PASS
cmdBuilder.AppendLine("BEGIN ") ;
cmdBuilder.AppendLine(" INSERT datapeople ") ;
cmdBuilder.AppendLine(" ( IDpeople, firsname, lastname, address, mou, street " ) ;
cmdBuilder.AppendLine(" ,tambom, aumpuer, province, Birthday, age, sex ) " ) ;
cmdBuilder.AppendLine(" VALUES ") ;
cmdBuilder.AppendLine(" ( @add1, @add2, @add3, @add4, @add5, @add6, @add7 ") ;
cmdBuilder.AppendLine(" ,@add8, @add9, @add10, @add11, @add12 ) ;" ) ;
cmdBuilder.AppendLine("END ") ;
string sret = cmdBuilder.ToString() ;
เอาไปแทนของเดิมนะคะ
Code (C#)
string sret = "insert into datapeople(IDsick,IDpeople,firsname,lastname,address,mou"
+ " ,street,tambom,aumpuer,province,Birthday,age,sex)"
+ "values(@add00,@add1,@add2,@add3,@add4,@add5,@add6,@add7"
+ " ,@add8,@add9,@add10,@add11,@add12)";
แล้วให้ไป SET identity specification ตามรูปข้างบน
ที่ ExecuteNoneQuery หาตัวแปรไปรับ ถ้าค่าเป็น 0 คือไม่มีการ insert เพื่อจะได้ display message ต่อไป
เป็น trick อีกอย่างคือการ execute sql statement มากกว่า 1 statement ด้วย ExecuteNoneQuery ค่ะ
|
|
|
|
|
Date :
2010-06-05 09:13:04 |
By :
blurEyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
cmdBuilder.AppendLine("WHERE (FIRSTNAME=@add2) AND (LASTNAME=@add3); ") ;
SET identity specification >> ทำแล้วครับสะดวกมาก
มันก็แค่ดูว่า ทั้ง2 อันนี้มีในตารางหรือเปล่า ผมอยากให้มัน แบบว่า มีนามสกุลอยู่ในตารางแล้ว แต่ชื่อไม่ซ้ำสามารถ insert ได้แล้วก็ ชื่อซ้ำได้แต่นามสกุล ห้ามซ้ำ กับคนที่มีชื่อและนามสกุล นี้แล้ว พอจะทำตัวอย่างให้ดูได้ไหมครับ
|
|
|
|
|
Date :
2010-06-05 10:05:49 |
By :
thaic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
^ ^ น่าจะถูกแล้วนะคะ นี่คือการตรวจสอบว่า ถ้ามีข้อมูลที่ซ้ำทั้งชื่อ และ ซ้ำนามสกุล จะมีค่ามากกว่า 0
ซึ่งจะไม่มีการ insert ค่ะ ถ้าอย่างใดอย่างหนึ่งซ้ำ แต่ไม่ทั้งสอง จะมีค่าเป็น 0 ค่ะ
|
|
|
|
|
Date :
2010-06-05 10:13:05 |
By :
blurEyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ๋อ ที่จริงผมทำได้แล้วล่ะแต่ ผมไม่เข้าใจตรงงนี้เอง พอเอา Code คุณStupid gal ไปดัดแปลงผลก็ออกมาน่าชื่นใจ ขอบคุณมากครับ
ตรงนี้ที่ผมพลาดไป
COUNT(IDSICK) ตอนแรก ใส่ *
WHERE (FIRSTNAME=@add2) AND (LASTNAME=@add3); ตรงนี้อีก ผมลืมไปว่ามันสามารถตรวจสอบโดย ภาษา SQL ได้ ผมนั่งงมกับ C# ตรวจสอบอยู่นั้นแหละ
Code (C#)
private void button9_Click(object sender, EventArgs e)
{
//เพิ่มข้อมูลในฐานข้อมูล
string strSQL, strSQL2, strConn = "Data Source = .\\SqlExpress;Initial Catalog=datatest;Integrated Security=true";
Conn = new SqlConnection();
if (Conn.State == ConnectionState.Open)
{
MessageBox.Show("ผิดพลาดมีปัญหาในการเชื่อมต่อฐานข้อมูล", "ระบบผิดพลาด");
}
// MessageBox.Show("ข้อมูลซ้ำกับ ข้อมูลในฐานข้อมูล", "ผิดพลาด");
Conn.ConnectionString = strConn;
Conn.Open();
DataSet dat = new DataSet();
SqlCommand cmd;
SqlDataAdapter ad;
int intNumRows, intNumRows2;
//bool booA = false,booB = true;
strSQL = "SELECT COUNT(IDSICK) FROM datapeople WHERE IDpeople = '" + maskedTextBox5.Text + "' ";
strSQL2 = "SELECT COUNT(IDSICK) FROM datapeople WHERE (firsname = '" + textBox9.Text + "')AND (lastname = '" + textBox19.Text + "') ";
//strSQL3 = "SELECT COUNT(IDSICK) FROM datapeople WHERE lastname = '" + textBox19.Text + "' ";
cmd = new SqlCommand(strSQL, Conn);
cmd = new SqlCommand(strSQL2, Conn);
//cmd = new SqlCommand(strSQL3, Conn);
intNumRows = Convert.ToInt32(cmd.ExecuteScalar());
intNumRows2 = Convert.ToInt32(cmd.ExecuteScalar());
//intNumRows3 = Convert.ToInt32(cmd.ExecuteScalar());
if (intNumRows > 0)
{
MessageBox.Show("ข้อมูลซ้ำ", "ผิดพลาด");
Conn.Close();
}
else if (intNumRows2 == 0 )
{
string sret = "insert into datapeople(IDpeople,firsname,lastname,address,mou,street,tambom,aumpuer,province,Birthday,age,sex)" +
"values(@add1,@add2,@add3,@add4,@add5,@add6,@add7,@add8,@add9,@add10,@add11,@add12)";
cmd = new SqlCommand(sret, Conn);
//cmd.Parameters.AddWithValue("add00", textBox18.Text);
cmd.Parameters.AddWithValue("add1", maskedTextBox5.Text);
cmd.Parameters.AddWithValue("add2", textBox9.Text);
cmd.Parameters.AddWithValue("add3", textBox19.Text);
cmd.Parameters.AddWithValue("add4", textBox10.Text);
cmd.Parameters.AddWithValue("add5", textBox11.Text);
cmd.Parameters.AddWithValue("add6", textBox12.Text);
cmd.Parameters.AddWithValue("add7", textBox13.Text);
cmd.Parameters.AddWithValue("add8", textBox14.Text);
cmd.Parameters.AddWithValue("add9", textBox15.Text);
cmd.Parameters.AddWithValue("add10", maskedTextBox6.Text);
cmd.Parameters.AddWithValue("add11", textBox17.Text);
if (radioButton13.Checked == true)
{
cmd.Parameters.AddWithValue("add12", "Male");
}
else if (radioButton14.Checked == true)
{
cmd.Parameters.AddWithValue("add12", "Female");
}
else
{
MessageBox.Show("โปรดกลับไปเลือกเพศ");
Conn.Close();
}
ad = new SqlDataAdapter(cmd);
ad.Fill(dat, "TTL");
MessageBox.Show("สำเร็จ");
Conn.Close();
}
else
{
MessageBox.Show("ผิพลาดอย่างแรงงงงงๆๆ");
}
}
|
|
|
|
|
Date :
2010-06-05 10:50:30 |
By :
thaic |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ผมอยากช่วยอธิบายหน่อยครับว่าตอนแรกเราต้องทำยังไงกับการเชื่อมต่อฐานข้อมูลอะครับ
|
|
|
|
|
Date :
2010-11-14 13:34:05 |
By :
jiraphan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณค่ะ โค้ดพี่ช่วยเค้าได้เยอะเรย
|
|
|
|
|
Date :
2013-01-06 23:49:40 |
By :
โบ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มัน เออเร่อ เพราะอะไรครับช่วยดูให้หน่อยครับ
|
|
|
|
|
Date :
2017-11-13 19:39:31 |
By :
nam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แก้ไขเปลี่ยนเอาเป็น text มาครับ รูปภาพแสดงก็ไม่ครบ ก๊อปปี้ก็ไม่ได้
แต่เออเร่อร์ก็บอกว่า sql statement มีปัญหา ก็เช็คให้ดีว่ามันผิดยังไง
ตัวแปรมาครบหรือไม่ และมันควรจะ debug โปรแกรมได้
ถ้า debug ไม่เป็น ก็ alert sql statement ออกมาเช็คด้วยตาเปล่า
หรือเอาไป รันใน phpmyadmin จะได้รู้ว่า ผิดตรงไหน
|
|
|
|
|
Date :
2017-11-13 20:56:02 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 04
|