将数据从C#/ASP.NET应用程序插入SQL Server
这是我第一次编写数据库插入 通过我自己的工作和其他人的例子,我能够在下面编写这段代码将数据从C#/ASP.NET应用程序插入SQL Server,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,这是我第一次编写数据库插入 通过我自己的工作和其他人的例子,我能够在下面编写这段代码 using (SqlConnection openCon = new SqlConnection("")) { String connection = "INSERT INTO Damage (Area,Building,Conference,Apartment,Room,DescribeDamage) VALUES (@Area,@Building,@Conference,@Apartment,@Ro
using (SqlConnection openCon = new SqlConnection(""))
{
String connection = "INSERT INTO Damage (Area,Building,Conference,Apartment,Room,DescribeDamage) VALUES (@Area,@Building,@Conference,@Apartment,@Room,@DescribeDamage)";
using (SqlCommand CCC = new SqlCommand(connection, openCon))
{
try
{
openCon.Open();
CCC.Connection = openCon;
CCC.CommandType = CommandType.Text;
CCC.Parameters.Add("@Area", SqlDbType.Char, 24).Value = MainDDL.SelectedItem.ToString();
CCC.Parameters.Add("@Building", SqlDbType.Char, 9).Value = ddlBuildingCCC.SelectedItem.ToString();
CCC.Parameters.Add("@Conference", SqlDbType.Char, 5).Value = txtConferenceCCC.ToString();
CCC.Parameters.Add("@Apartment", SqlDbType.VarChar, 4).Value = txtApartmentCCC.ToString();
CCC.Parameters.Add("@Room", SqlDbType.VarChar, 10).Value = txtRoomCCC.ToString();
CCC.Parameters.Add("@DescribeDamage", SqlDbType.VarChar, 100).Value = txtDescribeCCC.ToString();
CCC.ExecuteNonQuery();
CCC.Dispose();
}
catch (SqlException)
{
// error here
}
finally
{
openCon.Close();
}
}
}
下面更新了Guffa的代码,我将根据您的评论进行重写,但我想看看是否可以先让它工作
using (SqlConnection connection = new SqlConnection("Asset managementConnectionString"))
{
String query = "INSERT INTO Damage (Area,Building,Conference,Apartment,Room,DescribeDamage) VALUES (@Area,@Building,@Conference,@Apartment,@Room,@DescribeDamage)";
using (SqlCommand CCC = new SqlCommand(query, connection))
{
try
{
connection.Open();
CCC.CommandType = CommandType.Text;
CCC.Parameters.Add("@Area", SqlDbType.Char, 24).Value = MainDDL.SelectedItem.ToString();
CCC.Parameters.Add("@Building", SqlDbType.Char, 9).Value = ddlBuildingCCC.SelectedItem.ToString();
CCC.Parameters.Add("@Conference", SqlDbType.Char, 5).Value = txtConferenceCCC.ToString();
CCC.Parameters.Add("@Apartment", SqlDbType.VarChar, 4).Value = txtApartmentCCC.ToString();
CCC.Parameters.Add("@Room", SqlDbType.VarChar, 10).Value = txtRoomCCC.ToString();
CCC.Parameters.Add("@DescribeDamage", SqlDbType.VarChar, 100).Value = txtDescribeCCC.ToString();
CCC.ExecuteNonQuery();
}
catch (SqlException)
{
throw; // just rethrow for now
}
}
}
Response.Redirect("~/Default.aspx");
}
}
我丢失了我跟随的第一个示例,以后再也找不到了。
所以我想我是无意中尝试了两种不同的方法
问题:
现在没有任何东西正在调试,但我还没有在数据库中插入任何东西。
我认为有些代码是不需要的,你能帮我压缩代码并插入数据吗?
我要用一个不同的例子重写整个故事。但我想知道为什么这不符合经验
更新的问题,
找出了为什么我犯了错误,即使在我扔它们的时候也没有得到报告。
现在我越来越紧张
初始化字符串的格式不符合从索引0开始的规范。
在…上
使用(SqlConnection连接=新的SqlConnection(“AssetmanagementConnectionString”))
我还没有弄明白这个问题。
我可以采取哪些步骤来解决这个问题 1。不要接受例外情况 您的代码没有显示任何错误,因为您显式地接受了类型为
SqlException
的任何异常。删除您的catch
片段,或者使用异常信息执行一些有意义的操作
2。正确命名变量
命名变量CCC是错误的,原因很多。首先,它代表的是什么还不清楚,其次,在.NET世界中,大写字母表示对类成员名称的引用。改为使用类似于插入命令的insertCommand
3。不要使用块处置在中声明的对象。
一旦using
块结束,变量将自动处理
4。确保连接字符串不是硬编码的文本字符串值。
如果您需要切换db服务器,您需要将连接字符串放在一个位置,这样只需进行一次更改。您甚至可以将其设置为无需重新编译
5。避免紧耦合
从外观上看,您似乎直接从一些UI控件设置参数值。不要那样做。相反,将插入逻辑封装在一个独立于UI的类中,以便将来更容易重用它
这就是我能马上想到的一切。1。不要接受例外情况 您的代码没有显示任何错误,因为您显式地接受了类型为
SqlException
的任何异常。删除您的catch
片段,或者使用异常信息执行一些有意义的操作
2。正确命名变量
命名变量CCC是错误的,原因很多。首先,它代表的是什么还不清楚,其次,在.NET世界中,大写字母表示对类成员名称的引用。改为使用类似于插入命令的insertCommand
3。不要使用块处置在中声明的对象。
一旦using
块结束,变量将自动处理
4。确保连接字符串不是硬编码的文本字符串值。
如果您需要切换db服务器,您需要将连接字符串放在一个位置,这样只需进行一次更改。您甚至可以将其设置为无需重新编译
5。避免紧耦合
从外观上看,您似乎直接从一些UI控件设置参数值。不要那样做。相反,将插入逻辑封装在一个独立于UI的类中,以便将来更容易重用它
这就是我能马上想到的一切。首先,您不需要行CCC.Dispose(),因为这是使用块的要点-资源将在使用后被释放 除了这行代码外,代码看起来还不错:
CCC.Parameters.Add("@Area", SqlDbType.Char, 80).Value = 80;
如果您使用的是字符类型,并为其指定一个整数值,则会发生异常。
由于您正在接受异常,因此根本看不到此错误,因此没有插入数据
将代码更改为如下所示,然后查看是否有效:
CCC.Parameters.Add("@Area", SqlDbType.Char, 80).Value = "80";
除非您的“区域”字段实际上是数据库中的整数类型。在这种情况下,您应该相应地更改SqlDbType。首先,您不需要行CCC.Dispose(),因为这是使用块的要点-资源将在使用后被释放 除了这行代码外,代码看起来还不错:
CCC.Parameters.Add("@Area", SqlDbType.Char, 80).Value = 80;
如果您使用的是字符类型,并为其指定一个整数值,则会发生异常。
由于您正在接受异常,因此根本看不到此错误,因此没有插入数据
将代码更改为如下所示,然后查看是否有效:
CCC.Parameters.Add("@Area", SqlDbType.Char, 80).Value = "80";
除非您的“区域”字段实际上是数据库中的整数类型。在这种情况下,您应该相应地更改SqlDbType。不需要某些代码是正确的。但首先:
- 永远不要抓住一个例外,什么也不做
throw;
当然,只有在实际要捕获此方法中的异常时,才需要使用try…catch
块。另一种方法是省略try…catch
,让异常冒泡出来,让更高级别的代码处理它。我