2012-09-20 134 views
0

我尝试了数万种方法来完成范围标识工作。这只是返回__Page!Scope_Identity有什么问题?

Query = "INSERT INTO seekers(name,sname,lname,status,gender,dob,major,experince,email,password,phone,valid,city) values(@name,@sname,@lname,@status,@gender,@dob,@major,@exp,@email,@password,@phone,0,@city);SELECT SCOPE_IDENTITY();"; 

// setting up command definition 
Command = new SqlCommand(Query, Connection); 

// setting up command parameters 
Command.Parameters.AddWithValue("email", txt_email.Text); 
Command.Parameters.AddWithValue("gender", lst_gender.SelectedValue); 
Command.Parameters.AddWithValue("status", lst_status.SelectedValue); 
Command.Parameters.AddWithValue("phone", long.Parse("968" + txt_phone.Text)); 
Command.Parameters.AddWithValue("password", txt_password.Text); 
Command.Parameters.AddWithValue("exp", lst_exp.SelectedValue); 
Command.Parameters.AddWithValue("city", lst_exp.SelectedValue); 
Command.Parameters.AddWithValue("major", lst_major.SelectedValue); 
Command.Parameters.AddWithValue("name", txt_name.Text); 
Command.Parameters.AddWithValue("sname", txt_sname.Text); 
Command.Parameters.AddWithValue("lname", txt_lname.Text); 
Command.Parameters.AddWithValue("dob", cld_birth.SelectedDate); 

int ID = (int)Command.ExecuteScalar(); 
+2

与'ExecuteScalar',你不能执行选择statments。 –

+1

在这里看到这个例子:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx它为我工作与ExecuteScalar。 – Aristos

+0

不确定你的意思是返回'__Page',但表中是否有插入触发器?此外,表格确实有一个标识列? –

回答

0

尝试参数如下...

Query = "INSERT INTO seekers(name,sname,lname,status,gender,dob,major,experince,email,password,phone,valid,city) values(@name,@sname,@lname,@status,@gender,@dob,@major,@exp,@email,@password,@phone,0,@city);SET @ID=SCOPE_IDENTITY();" 

//Your Parameters.. 
SqlParameter ID=new SqlParameter(); 
ID.Name="@ID"; 
ID.Direction=ParameterDirection.Output; 
Command.Parameters.Add(ID); 
Command.ExecuteNonQuery(); 
int id=(int)ID.Value; 

或 Tryb以铸造为后续输出...

Query = "INSERT INTO seekers(name,sname,lname,status,gender,dob,major,experince,email,password,phone,valid,city) values(@name,@sname,@lname,@status,@gender,@dob,@major,@exp,@email,@password,@phone,0,@city);SELECT CAST(scope_identity() AS int);" 

int id= (Int32)Command.ExecuteScalar(); 
0

SCOPE_IDENTITY将返回一个小数,请尝试:

int ID = (int) (decimal) Command.ExecuteScalar(); 

这不是很清楚你的意思是:

这只是返回__Page!

推测发布的代码会抛出一个异常,这会导致一些更高级别的代码执行“... __ __page”的任何操作。

如果查看异常详细信息,可以找到更多关于发生的事情的信息:我怀疑是InvalidCastException,因为您试图将由Command.ExecuteScalar(盒装小数)返回的对象转换为int。

0

使用SET NOCOUNT关闭,并尝试

由于首先执行语句是插入的返回值的记录数影响