如何使用SQL Server插入表中

时间:2016-03-09 13:27:14

标签: c# sql sql-server

我卡在这种情况下无法插入表tbl_customer给出错误:

  

将表达式转换为数据类型int的算术溢出错误   声明已经终止。

这是我的表结构:

create table tbl_customer(

id int identity primary key,
cust_name varchar(50) NOT NULL,
filecode varchar(20) NOT NULL,
cust_mobile int,
cust_cnic varchar(50) NOT NULL,
cust_phone int,
cust_address varchar(200)

)

这是我用来插入的代码:

insert into tbl_customer values('Jonah Gordian','LHR001',03451119182,'11-22112-122',1212121212,'abc street 12')

我在c#中使用此代码尝试插入:

connclass.insert("insert into tbl_customer(cust_name,filecode,cust_mobile,cust_cnic,cust_phone,cust_address) VALUES('" + txtname.Text + "','" + txtfilecode.Text + "','" + int.Parse(txtmob.Text) + "','" + txtcnic.Text + "','" + int.Parse(txtphone.Text) + "','" + txtaddress.Text + "')");

4 个答案:

答案 0 :(得分:2)

试试这个,

CREATE TABLE tbl_customer (
    id INT identity PRIMARY KEY
    ,cust_name VARCHAR(50) NOT NULL
    ,filecode VARCHAR(20) NOT NULL
    ,cust_mobile BIGINT --or Varchar(20)
    ,cust_cnic VARCHAR(50) NOT NULL
    ,cust_phone INT
    ,cust_address VARCHAR(200)
    )

INSERT INTO tbl_customer
VALUES (
    'Jonah Gordian'
    ,'LHR001'
    ,03451119182
    ,'11-22112-122'
    ,1212121212
    ,'abc street 12'
    )

您已超出int数据类型限制。将数据类型从int更改为bigint或Varchar以解决此问题。

注意:如果你需要前导零,那么你可以选择Varchar,否则你可以使用BigInt。

答案 1 :(得分:2)

您将cust_mobile定义为int,但尝试插入03451119182,明显超出2147483647的限制。

更改为bigint或存储为VarChar(包括前导零)。

答案 2 :(得分:2)

create table tbl_customer(
id int identity primary key,
cust_name varchar(50) NOT NULL,
filecode varchar(20) NOT NULL,
cust_mobile varchar(20),
cust_cnic varchar(50) NOT NULL,
cust_phone varchar(20),
cust_address varchar(200)
)


insert into tbl_customer 
 (cust_name, filecode, cust_mobile, cust_cnic, cust_phone, cust_address )
 values
 ('Jonah Gordian','LHR001','03451119182','11-22112-122','1212121212','abc street 12');

而且C#代码对SQL注入攻击是开放的,而不是使用参数。即:

string sql = @"insert into tbl_customer 
    (cust_name,filecode,cust_mobile,cust_cnic,cust_phone,cust_address) 
    VALUES
    (@cust_name,@filecode,@cust_mobile,@cust_cnic,@cust_phone,@cust_address)";

using (SqlConnection con = new SqlConnection(@"server=.\SQLExpress;database=yourDbName;Trusted_Connection=yes"))
{
  var cmd = new SqlCommand(sql, con);
  cmd.Parameters.AddWithValue("@cust_name", txtname.Text);
  cmd.Parameters.AddWithValue("@filecode", txtfilecode.Text);
  cmd.Parameters.AddWithValue("@cust_mobile", txtmob.Text);
  cmd.Parameters.AddWithValue("@cust_cnic", txtcnic.Text);
  cmd.Parameters.AddWithValue("@cust_phone", txtphone.Text);
  cmd.Parameters.AddWithValue("@cust_address", txtaddress.Text);

  con.Open();
  cmd.ExecuteNonQuery();
  con.Close();
}

答案 3 :(得分:0)

您使用int

超出了bigint尝试的限制

此值 3451119182

在此链接中查看限制

https://msdn.microsoft.com/pt-br/library/ms187745(v=sql.120).aspx