ช่วยดู error ให้ทีค่ะ ดึงข้อมูลจาก database ขึ้นมา +1 แล้วเก็บเข้าไปใหม่
คือหนูจะทำการดึงข้อมูล ID ตัวล่าสุดที่ถูกบันทึกลงไปจาก database ขึ้นมา แล้วนำค่ามา +1 เพื่อให้เป็น ID ถัดไปแล้วก็เก็บลง database
มันฟ้องเกี่ยวกับหนูใช้ตัวแปรไม่ถูก หรือ convert ไม่ถูกต้องประมาณนี้ มันฟ้อง หนูก็นั่งงมแก้ไปแก้มา error มันก็ฟ้องเปลี่ยนไป แต่ส่วนใหญ่จะฟ้องเกี่ยวกับประเภทตัวแปรค่ะ
ตอนนี้ error ล่าสุดมันฟ้องว่า Input string was not in a correct format.
บบทัดที่ Line 56: Convert.ToInt16(n2);
code ก็ประมาณนี้ค่ะ
Code (C#)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
namespace IT_REQ
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void submit_Click(object sender, EventArgs e)
{
// ส่วน connect //
SqlConnection objConn;
String strConnString;
strConnString = "Server=*****;Uid=**;PASSWORD=***;database=test;";
objConn = new SqlConnection(strConnString);
objConn.Open();
//************** ทดสอบ connect to database ***********//
if (objConn.State == ConnectionState.Open)
{
this.lblText.Text = "SQL Server Connected";
}
else
{
this.lblText.Text = "SQL Server Connect Failed";
}
SqlTransaction tr = objConn.BeginTransaction();
SqlCommand cmd = new SqlCommand();
cmd = objConn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.Transaction = tr;
// date //
DateTimeFormatInfo dateFormat = new CultureInfo("en-US").DateTimeFormat;
string d = DateTime.Now.ToString("MM/dd/yyyy", dateFormat);
// ส่วน query //
//////////////////// ******* zone error *********//////////////////////
string n = "SELECT no+1 FROM REQUEST ORDER BY no DESC";
//cmd.CommandText = n;
string n2 = n;
Convert.ToInt16(n2);
///////////////////////////////////////////////////////////////////////
string isUS = "INSERT INTO REQUEST(no,plant,name,dep,tel,date,type) " +
"VALUES('"+n2+"','"//ID
+this.DropDownList4.Text+"','"//name
+this.TextBox1.Text+"','"//plant
+this.TextBox2.Text+"','"//department
+this.TextBox3.Text+"','"//tel
+d+"','"//date
+this.CheckBox1.Text+"')";//type
cmd.CommandText = isUS;
cmd.ExecuteNonQuery();
tr.Commit();
objConn.Close();
objConn = null;
tr.Dispose();
// clear //
TextBox1.Text = ""; //name
DropDownList4.ClearSelection();//plant
TextBox2.Text = "";//department
TextBox3.Text = "";//tel
CheckBox1.Checked = false;//type
}
}
}
เรื่อง connect กับ database ลองแล้ว connect ได้ปกติค่ะ
ช่วยดูให้หนูทีนะค่ะ หนูก็นั่งงมไปงมมาจนอึน พอดีหนูพึ่งหัดไม่นานเท่าไหร่ค่ะ หรือเป็นเพราะว่าหนูแปลงค่าตัวแปรมั่วค่ะ T^TTag : Ms SQL Server 2008, Web (ASP.NET), C#
Date :
2012-09-24 16:30:46
By :
วีรญา
View :
1196
Reply :
5
สวัสดีครับบ
ที่เห็นก็คือ คุณพยายามแปลง string เป็น int16 ใช่ป่ะครับ
ถ้าดูที่มาของ string จะเห็นว่า n2 มันเก็บค่าของ n ไว้ และค่าของ n ก็คือ "SELECT no+1 FROM REQUEST ORDER BY no DESC"
มันกลายเป็นว่าคุณ Convert.ToInt16( "SELECT no+1 FROM REQUEST ORDER BY no DESC"); ซึ่งทำไม่ได้แน่นอนครับ มันไม่ตรอง Format ครับผมมมมมม
Date :
2012-09-24 17:50:06
By :
chamachu
ค่ะ ตอนหนูนั่งงมก็คิดแบบพี่เลย ว่ากลัวว่ามันจะเอาค่า string ทั้งดุ้นนั้นมาแปลงเลย สรุปว่า มันยังไม่ทัน Execute ในดาต้าเบสเลยใช่มั๊ยค่ะ
หนูก็มั่วลองเอา cmd.CommandText = n; ก็ยิ่งไปกันใหญ่ แหะๆ
Date :
2012-09-25 05:56:33
By :
วีรญา
ใช่ครับ ตั้งแต่บรรทัดที่ 53 ถึง 57 ยังไม่มีการ Execute ใน Database เลยครับ คงต้องเพิ่มคำสั่งเข้าไปอีก มันเลยเอา string ทั้งหมดนั้นไป Convert
ขาดคำสั่ง
cmd.CommandText = n;
cmd.ExecuteReader(); หรือเปล่าครับ อะไรพวกนี้หรือเปล่า
ตรง execeute ผมไม่มั่นใจนะครับ ปกติใช้ DataAdapter อะครับ
Date :
2012-09-26 09:39:49
By :
chamachu
ได้แล้วค่ะ ขอบคุณมากค่ะ หนูลองเพิ่ม
Code (C#)
cmd.CommandText = n;
int a = cmd.ExecuteNonQuery();
Code (C#)
string n = "SELECT no FROM REQUEST ORDER BY no DESC ";
cmd.CommandText = n;
int a = cmd.ExecuteNonQuery();
string isUS = "INSERT INTO REQUEST(no,plant,name,dep,tel,date,type) " +
"VALUES('"+(a+1)+"','"//ID
+this.DropDownList4.Text+"','"//name
+this.TextBox1.Text+"','"//plant
+this.TextBox2.Text+"','"//department
+this.TextBox3.Text+"','"//tel
+d+"','"//date
+this.CheckBox1.Text+"')";//type
cmd.CommandText = isUS;
cmd.ExecuteNonQuery();
tr.Commit();
ค่าที่ได้ใน database เป็นตัวเลขแล้วค่ะ แต่ค่ายังไม่ถูก หนูต้องงมต่อไป ขอบคุณมากค่ะ :D
ประวัติการแก้ไข 2012-09-26 10:21:46
Date :
2012-09-26 10:20:40
By :
วีรญา
ดีใจด้วยคร๊าฟฟฟ ขอให้มีความสุขกับการเขียนโค็ดนะ
Date :
2012-10-02 09:47:02
By :
chamachu
Load balance : Server 02