Visual C#SQL语句不会插入数据库

时间:2017-07-28 16:41:27

标签: c# sql-server tsql

我试图简单地将值插入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 ...

2 个答案:

答案 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();
    }
}

更新 - 我更改了上面的代码,以反映我本地计算机上的工作测试。请注意,连接字符串格式不同(缺少空格)。