如何将字符串数组传递到存储过程并执行插入查询

问题描述 投票:0回答:2

已经看到了很多使用表值参数将数组值传递到存储过程的示例,而我也遵循相同的例子,但是这些值未插入表中。在这里,我必须发送一个包含一些ID和一个Int值的字符串数组。我需要使用此唯一ID插入完整的数组值。

控制器

 [HttpPost]
        public  JsonResult AssignGod(int id,string[] g)
        {
            SqlConnection con = null;              
            try
            {
                con = GetSqlConnectionObject(cs);             
                DataTable dt_Categories = new DataTable();
                dt_Categories.Columns.Add("Category", typeof(String));
                DataRow workRow;
                foreach (string cat in g)
                {
                    workRow = dt_Categories.NewRow();
                    workRow["Category"] = cat.Trim();
                    dt_Categories.Rows.Add(workRow);
                }
                SqlCommand cmd = new SqlCommand("AssignGod", con);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter tvparam = cmd.Parameters.AddWithValue("@dt",dt_Categories);
                SqlParameter tvparam1 = cmd.Parameters.AddWithValue("@tempId", id);
                tvparam.SqlDbType = SqlDbType.Structured;
                cmd.ExecuteNonQuery();
                string result = "success";  
                return Json(result, JsonRequestBehavior.AllowGet);
            }

            catch
            {
                throw;
            }
            finally
            {
                CloseSqlConnectionObject(con);
            }
            return Json("asa", JsonRequestBehavior.AllowGet);
        }

存储过程

    CREATE TYPE dbo.MyDataTable 
    AS TABLE
    (
      gods NVARCHAR(200)
    );
    GO



    ALTER  PROC [dbo].[AssignGod]
                        @dt AS [dbo].MyDataTable READONLY,
                        @tempId int

    AS
    BEGIN
            SET NOCOUNT ON;
                    BEGIN
                    INSERT dbo.TempleGod(templeid,gid)  values (@tempId,(SELECT gods   FROM @dt   WHERE gods NOT IN (SELECT gods FROM dbo.TempleGod)));
                    END
END

虽然正在运行此代码,但未显示任何错误,但表仍然为空Table must be like this

arrays asp.net-mvc-4 stored-procedures table-valued-parameters
2个回答
0
投票

尝试将您的插入语句更改为此:

INSERT dbo.TempleGod(templeid,gid)   
SELECT @tempId, gods   FROM @dt   WHERE gods NOT IN (SELECT gods FROM dbo.TempleGod))

0
投票

您的数据表列名称需要与proc中的类型声明匹配。您有“类别”,然后是“神”该插入-老实说,我从来没有见过那样做过。无论如何,都不确定要做什么,但是如果该ID是主键,则将同一行插入到每一行中。您可能需要将其移到类型定义中。

© www.soinside.com 2019 - 2024. All rights reserved.