我试图简单地将值插入SQL表中。数据库中的ID不能是AUTO_INCREMENT所以我使用MAX和+1。此代码不仅不会生成新ID,也不会将任何插入到表中。
即使在调试器中没有错误或警告,它也不会出现在数据库本身中。
这是我的代码:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Windows;
using System.ComponentModel;
using System.Drawing;
using System.Text;
namespace WebApplication2
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ButtonClick(object sender, EventArgs e){
using (var sqlConnection1 = new SqlConnection("Data
Source=SERVER; Initial Catalog = Metal; Integrated
Security = True"))
{
SqlDataAdapter cmd = new SqlDataAdapter();
using (var insertData = new SqlCommand("INSERT INTO ApptIn
(CONTROLNUMBER, CARRIERNAME, EXPECTEDNUMOFPIECES, EXPECTEDWEIGHT) VALUES
(@carrierSelectInput,
@pieceCountInput, @weightinput)")
{
SqlCommand generateApptNum = new SqlCommand();
View appNumView = new View();
insertData.Connection = sqlConnection1;
string carrierSelectInput = DropDownList1.Text;
string pieceCountInput = TextBox1.Text;
string weightInput = TextBox2.Text;
insertData.Parameters.Add("@carrierSelectInput",
carrierSelectInput.VarChar);
insertData.Parameters.Add("@pieceCountInput",
pieceCountInput.Int);
insertData.Parameters.Add("@weightInput",
weightInput.Int);
cmd.InsertCommand = insertData;
sqlConnection1.Open();
insertData.ExecuteNonQuery();
generateApptNum.ExecuteNonQuery();
sqlConnection1.Close();
}
}
}
}
}
编辑:我已经尝试将SQL运行到数据库中并且它给出了一个错误,因此我更改了它(在代码中更新)但它放入了ID = 0 ...
答案 0 :(得分:2)
我知道你已经承诺了你的计划,但是,我觉得我必须指出,由于查询中Max id值的子选择,insert语句可能比正常插入。
如果您计划插入大量行或创建API以供整个代码使用,我强烈建议您将列定义调整为标识列,或者考虑使用aa序列生成ID。
答案 1 :(得分:1)
问题可能是您需要在insertData命令上将CommandType指定为CommandType.Text。原始代码中有很多内容正在声明多个sql命令。我认为代码可以简化为:
protected void ButtonClick(object sender, EventArgs e)
{
using (var sqlConnection1 = new SqlConnection("data source=testServer;initial catalog=testCat;integrated security=True;"))
using (var insertData = new SqlCommand("insert into tempExample (id, code, description) values ((select max(coalesce(id, 1)) from tempExample)+1, @code, @description)", sqlConnection1))
{
insertData.CommandType = CommandType.Text;
insertData.Parameters.AddWithValue("@code", "Testing4");
insertData.Parameters.AddWithValue("@description", "Testing3");
sqlConnection1.Open();
insertData.ExecuteNonQuery();
sqlConnection1.Close();
}
}
更新 - 我更改了上面的代码,以反映我本地计算机上的工作测试。请注意,连接字符串格式不同(缺少空格)。