Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据从C#/ASP.NET应用程序插入SQL Server_C#_Asp.net_Sql_Sql Server - Fatal编程技术网

将数据从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
,让异常冒泡出来,让更高级别的代码处理它。我