Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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# 红色程序。请阅读并了解我目前数据库中没有存储过程这一主要问题,我认为使用您提供的代码会使我的工作有点不一致,因为我已经编写了,您不同意吗?嗯,不是我,所以我不知道:/I同意,我不确定,尽管我发现TVP比XML更容易使用。我还感到困惑的是,有人会对一个说“使_C#_Asp.net_Sql_Sql Server_Iterator - Fatal编程技术网

C# 红色程序。请阅读并了解我目前数据库中没有存储过程这一主要问题,我认为使用您提供的代码会使我的工作有点不一致,因为我已经编写了,您不同意吗?嗯,不是我,所以我不知道:/I同意,我不确定,尽管我发现TVP比XML更容易使用。我还感到困惑的是,有人会对一个说“使

C# 红色程序。请阅读并了解我目前数据库中没有存储过程这一主要问题,我认为使用您提供的代码会使我的工作有点不一致,因为我已经编写了,您不同意吗?嗯,不是我,所以我不知道:/I同意,我不确定,尽管我发现TVP比XML更容易使用。我还感到困惑的是,有人会对一个说“使,c#,asp.net,sql,sql-server,iterator,C#,Asp.net,Sql,Sql Server,Iterator,红色程序。请阅读并了解我目前数据库中没有存储过程这一主要问题,我认为使用您提供的代码会使我的工作有点不一致,因为我已经编写了,您不同意吗?嗯,不是我,所以我不知道:/I同意,我不确定,尽管我发现TVP比XML更容易使用。我还感到困惑的是,有人会对一个说“使用TVP,这里有一个链接”的答案投赞成票,而不是对一个说“使用TVP”的答案投反对票,并且实际显示了一些代码来演示如何在这个特定场景中实现这一点。StackOverflow的用户行为令人费解。无论如何,我只是提出了我的观点,这可能会帮助其他人。


红色程序。请阅读并了解我目前数据库中没有存储过程这一主要问题,我认为使用您提供的代码会使我的工作有点不一致,因为我已经编写了,您不同意吗?嗯,不是我,所以我不知道:/I同意,我不确定,尽管我发现TVP比XML更容易使用。我还感到困惑的是,有人会对一个说“使用TVP,这里有一个链接”的答案投赞成票,而不是对一个说“使用TVP”的答案投反对票,并且实际显示了一些代码来演示如何在这个特定场景中实现这一点。StackOverflow的用户行为令人费解。无论如何,我只是提出了我的观点,这可能会帮助其他人。谢谢你praveen+1因为这是一个可能的解决方案,可以直接回答我的问题。@user1027620公平地说,我想这里的每个人都直接回答了你的问题。您的问题是“如何才能更有效地执行此操作?”和/或“如何避免多次访问数据库?”对吗?每一个答案都说明了这一点,“一次插入一个”和使用完全独立的命令以及所需的所有支架之间是有区别的。我对你99%的数字表示怀疑。很多应用程序允许你从下拉列表中选择多个项目或选中多个复选框。我敢打赌,99%的人不会将每个复选框值作为一个完全独立的命令提交。
    #region Methods
    public int Insert(List<District> Districts, List<Category> Categories)
    {
        StringBuilder sqlString = new StringBuilder("INSERT INTO Stores (name, image) VALUES (@Name, @Image);");

        using (SqlConnection sqlConnection = new
           SqlConnection(ConfigurationManager.ConnectionStrings["OahuDB"].ConnectionString))
        {
            SqlCommand sqlCommand = new SqlCommand(sqlString.ToString(), sqlConnection);
            sqlCommand.Parameters.AddWithValue("@Name", this.Name);
            sqlCommand.Parameters.AddWithValue("@Image", this.Image);

            sqlConnection.Open();
            int x = (int)sqlCommand.ExecuteScalar();

            sqlString.Clear();
            sqlCommand.Parameters.Clear();

            foreach (District item in Districts)
            {
                sqlString.AppendLine("INSERT INTO districts_has_stores (district_id, store_id) VALUES (@DistrictID, @StoreID);");
                sqlCommand.CommandText = sqlString.ToString();
                sqlCommand.Parameters.AddWithValue("@DistrictID", item.ID);
                sqlCommand.ExecuteNonQuery();
            }

            return x;
        }
    }
            sqlString.Clear();
            sqlCommand.Parameters.Clear();
            sqlString.AppendLine("INSERT INTO districts_has_stores (district_id, store_id) VALUES (@DistrictID, @StoreID);");
            sqlCommand.CommandText = sqlString.ToString();
            sqlCommand.Parameters.AddWithValue("@StoreID", x);
            foreach (District item in Districts)
            {
                sqlCommand.Parameters.AddWithValue("@DistrictID", item.ID);
                sqlCommand.ExecuteNonQuery();
            } 
            sqlString.Clear();
            sqlCommand.Parameters.Clear();
            sqlString.AppendLine("INSERT INTO categories_has_stores (category_id, store_id) VALUES (@CategoryID, @StoreID);");
            sqlCommand.CommandText = sqlString.ToString();
            sqlCommand.Parameters.AddWithValue("@StoreID", x);
            foreach (Category item in Categories)
            {
                sqlCommand.Parameters.AddWithValue("@CategoryID", item.ID);
                sqlCommand.ExecuteNonQuery();
            } 
sqlCommand.Parameters.Clear(); 
sqlString.Clear();
sqlString.AppendLine("INSERT INTO districts_has_stores (district_id, store_id) VALUES (@DistrictID, @StoreID);"); 
sqlCommand.CommandText = sqlString.ToString(); 
sqlCommand.Parameters.AddWithValue("@DistrictID", 0);  // as dummy value
sqlCommand.Parameters.AddWithValue("@StoreID", x);  // invariant
foreach (District item in Districts) 
{ 
    sqlCommand.Parameters["@DistrictID"].Value = item.ID; 
    sqlCommand.ExecuteNonQuery(); 
} 
sqlString.Clear();
sqlString.Append("INSERT INTO districts_has_stores (district_id, store_id) VALUES (");
foreach(District item in Districts)
{
    sqlString.Append(item.ID.ToString);
    sqlString.Append(", ")
    sqlString.Append(x.ToString()); 
    sqlString.Append("),"); 
}
sqlString.Length--;
sqlCommand.CommandText = sqlString.ToString()
CREATE TYPE dbo.DistrictsType AS TABLE
    ( DistrictID int, StoreID int )
CREATE PROCEDURE usp_InsertDistricts 
(@tvpNewDistricts dbo.DistrictsType READONLY)
AS
BEGIN
    INSERT INTO dbo.Districts (DistrictID, StoreID)
    SELECT dt.DistrictID, dt.StoreID FROM @tvpNewDistricts AS dt;
END
DataTable dtDistricts = ConvertListToDataTable(Districts);
SqlCommand insertCommand = new SqlCommand("usp_InsertDistricts", sqlConnection);
SqlParameter p1 = insertCommand.Parameters.AddWithValue("@tvpNewDistricts", dtDistricts);
p1.SqlDbType = SqlDbType.Structured;
p1.TypeName = "dbo.DistrictsType";
insertCommand.ExecuteNonQuery();
INSERT tbl (f1, f2, ... fN)
SELECT * FROM @TVP
  using (...)
  {
    SqlCommand cmd       = new SqlCommand("dbo.InsertStoreAndDistricts", sqlConnection);
    cmd.CommandType      = CommandType.StoredProcedure;
    SqlParameter tvparam = cmd.Parameters.AddWithValue("@Districts", Districts);
    tvparam.SqlDbType    = SqlDbType.Structured;

    // other params here - name and image

    cmd.ExecuteNonQuery();
  }
ALTER PROCEDURE [dbo].[insertStore]
@XMLDATA xml,
@name varchar(50),
@image datatype
 AS
 Begin
  INSERT INTO Store
  (name
   ,image
  )
Select XMLDATA.item.value('@name[1]', 'varchar(10)') AS Name,   
XMLDATA.item.value('@image[1]', 'yourData type') AS Image
FROM @XMLDATA.nodes('//Stores/InsertList/Store') AS XMLDATA(item)
END
public  string GenerateXML(List<District> Districts)
 var xml = new StringBuilder();
 var insertxml = new StringBuilder();
 xml.Append("<Stores>");
 for (var i = 0; i < Districts.Count; i++)
        { var obj = Districts[i];
          insertxml.Append("<Store");
          insertxml.Append(" Name=\"" + obj.Name  + "\" ");
          insertxml.Append(" Image=\"" + obj.Image + "\" ");
          insertxml.Append(" />");
        }
xml.Append("<InsertList>");
xml.Append(insertxml.ToString());
xml.Append("</InsertList>");

SqlCommand cmd= new SqlCommand("insertStore",connectionString);
cmd.CommandType=CommandType.StoredProcedure;
SqlParameter param = new SqlParameter ();
param.ParameterName ="@XMLData";
param.value=xml;
paramter.Add(param);
cmd.ExecuteNonQuery();