调用存储过程dbo.Bi_medicaoInset提示@ID_interno_disp参数未提供如何解决
问题根因
- 你在C#代码中声明了
@ID_interno_disp参数,但没有为其赋值,存储过程接收不到必填参数所以抛出报错 - 存储过程存在语法错误,关键字写错,参数引用有多余空格
- 存储过程名称引用存在冗余的
dbo.前缀
修复步骤
1. 修正C#代码
给@ID_interno_disp参数赋值,你需要先从Bi_dispositivo表中拿到你要传入的ID值(替换下方代码中的你的目标设备ID变量),同时修正存储过程名称:
SqlConnection connString = new SqlConnection ("Data Source = (LocalDb) \\ MSSQLLocalDB; Initial Catalog = tupaidb; Integrated Security = True"); connString.Open (); SqlCommand command = new SqlCommand (); command.Connection = connString; // 修正存储过程名称,去掉多余的dbo前缀 command.CommandText = "[dbo].[Bi_medicaoInset]"; command.CommandType = CommandType.StoredProcedure; // 给ID参数赋值,替换为你实际从Bi_dispositivo表查询到的ID值 command.Parameters.Add ("@ID_interno_disp", SqlDbType.Int).Value = 你的目标设备ID变量; command.Parameters.Add ("@med_hum", SqlDbType.VarChar, (50)). Value = humidity + "%"; command.Parameters.Add ("@med_temp", SqlDbType.VarChar, (50)). Value = temperature + "ºC"; command.Parameters.Add ("@med_lpg", SqlDbType.VarChar, (50)). Value = lpgGas + "%"; command.Parameters.Add ("@med_co", SqlDbType.VarChar, (50)). Value = monoCarbo + "%"; command.Parameters.Add ("@med_fumo", SqlDbType.VarChar, (50)). Value = smoke + "%"; command.ExecuteNonQuery (); connString.Close ();
如果你需要动态从Bi_dispositivo表取ID,可以提前执行查询语句拿到对应ID,示例如下:
// 示例:查询Bi_dispositivo表的指定ID,可根据自身业务需求加WHERE筛选条件 SqlCommand getIdCmd = new SqlCommand("SELECT TOP 1 ID_interno_disp FROM Bi_dispositivo", connString); int deviceId = (int)getIdCmd.ExecuteScalar(); command.Parameters.Add ("@ID_interno_disp", SqlDbType.Int).Value = deviceId;
2. 修正存储过程代码
把关键字AT改为AS,去掉values中参数名和@之间的多余空格:
USE [tupaidb] GO / ****** Object: StoredProcedure [dbo].[Bi_medicaoInset] Script Date: 5/18/2021 08:29:17 ****** / SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[Bi_medicaoInset] @ID_interno_disp int, @med_hum Varchar (50), @med_temp Varchar (50), @med_lpg Varchar (50), @med_co Varchar (50), @med_fumo Varchar (50) AS -- 修正原错误关键字AT BEGIN insert into Bi_medicao (ID_interno_disp, med_hum, med_temp, med_lpg, med_co, med_fumo) values (@ID_interno_disp, @med_hum, @med_temp, @med_lpg, @med_co, @med_fumo) -- 去掉@和参数名之间的多余空格 END

内容的提问来源于stack exchange,提问作者Pedro Tavares
相关产品推荐
相关产品推荐

