我正在重写这个长INSERT语句和参数,看起来像这样:
cmd.Parameters.AddWithValue("@Website", General.fnSQLNullValues(tWebsite.Text))
Run Code Online (Sandbox Code Playgroud)
其中General.fnSQLNullValues是这样的:
Public Shared Function fnSQLNullValues(ByVal sValue As Object, Optional ByVal Len As Integer = 999999) As Object
If sValue Is Nothing Then Return DBNull.Value
fnSQLNullValues = IIf(sValue.ToString.Length = 0, DBNull.Value, Left(sValue.ToString(), Len))
End Function
Run Code Online (Sandbox Code Playgroud)
我根本不喜欢这个,似乎很多代码都是这样做的,
cmd.Parameters.AddWithValue("@Website" , If(tWebsite.Text , DBNull.Value))
Run Code Online (Sandbox Code Playgroud)
根据我的理解,如果tWebsite.Text为null或未被接受,则DBNull.Value中的一行代码将替换tWebsite.Text作为值,在我看来,它与General中的其他函数做同样的事情.这是正确的,是一种比另一种更好的方式吗?
此外,我从第二种方式得到警告:"不能推断常见类型;对象假设",但在我看来,第一种方式是使用通用对象,所以我不知道我是否应该忽略这个警告
我正在研究C#项目,我是这项技术的新手.
我想从SQL Server 2008中读取一些数据,然后编写以下代码
public User select(string username, string password)
{
string connection = ConfigurationManager.ConnectionStrings["lawyersDBConnectionString"].ConnectionString.ToString();
string sql = string.Format("select * from users where userName = '{0}' and password = '{1}'", username, password);
SqlConnection con = new SqlConnection();
con.ConnectionString = connection;
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sql, con);
User user = new User();
DataRow dr;
try
{
da.Fill(ds);
dr = ds.Tables[0].Rows[0];
user.Id = Convert.ToInt16(dr["userID"]);
user.FirstName = (string)dr["firstName"];
user.LastName = (string)dr["lastName"];
user.Email = (string)dr["email"];
user.Username = (string)dr["userName"];
user.Password …Run Code Online (Sandbox Code Playgroud) 我想比较一个字符串,看它是否包含一个子字符串,但是,当我使用一个变量时,它应该为false时评估为true.
知道为什么会这样,以及如何解决这个问题?
DECLARE @Match VARCHAR
SET @Match = '%Matching%'
SELECT CASE WHEN 'Does This Match' LIKE @Match THEN 1 ELSE 0 END -- 1
SELECT CASE WHEN 'Does This Match' LIKE '%Matching%' THEN 1 ELSE 0 END -- 0
Run Code Online (Sandbox Code Playgroud) 我有一张包含产品的表格.我需要查询查找所有匹配结果到用户输入值.我SqlParameter用于插入输入.
SqlCommand findProcutsByPattern = new SqlCommand(
"SELECT *" +
" FROM [Products]" +
" WHERE ProductName LIKE @pattern", connection);
findProcutsByPattern.Parameters.AddWithValue("@pattern", '%' + pattern + '%');
Run Code Online (Sandbox Code Playgroud)
当用户输入字符串包含'_'或'%'时,问题就出现了,因为它们被解释为特殊字符.另一方面,考虑到这一点:
命令对象使用参数将值传递给SQL语句或存储过程,从而提供类型检查和验证.与命令文本不同,参数输入被视为文字值,而不是可执行代码.
我不应该有这样的问题.我是否需要替换/转义输入字符串中的所有'_'和'%',或者是否有更优雅的解决方案.我希望输入被视为文字.
我在表中有一些记录,其中包括名称中的特殊字符(N_EW,N\EW,N%EW,N"EW,N'EW).指定\,"和'作为输入工作正常(考虑它们)作为文字).
我在下面有这个工作代码.但是,我没有SqlParameter构造函数,它接受name,value和SqlDbType,我想只提供日期参数的类型.有没有办法做到这一点,不需要添加大量的代码?
SqlParameter[] parameters =
{
new SqlParameter("@START_ORDER", startOrder),
new SqlParameter("@END_ORDER", endOrder),
new SqlParameter("@START_ITEM", startItem),
new SqlParameter("@END_ITEM", endItem),
new SqlParameter("@START_DUEDATE", dateFrom),
new SqlParameter("@END_DUEDATE", dateTo)
};
Run Code Online (Sandbox Code Playgroud) 我想在存储过程中创建包含这个的SQL变量表;
Select a,b,c,d from **@tablename** where a=1 and c=0
Run Code Online (Sandbox Code Playgroud)
创建sp时如何用sp做到这一点?
我曾经有过这个
Dt = MyMod.GetDataTable("SELECT TOP " & QuestionsPerCats(i) & " * From Questions WHERE CategoriesID ='" & Cats(i) & "' ORDER BY NEWID()")
Run Code Online (Sandbox Code Playgroud)
但现在我决定使用sqlparameters之类的
Dim cmd As New SqlCommand("SELECT TOP @QuestionsPerCats * From Questions WHERE CategoriesID = @CategoriesID ORDER BY NEWID()", conn)
Dim sqlParam As SqlParameter = Nothing
sqlParam = cmd.Parameters.Add("@QuestionsPerCats", SqlDbType.SmallInt)
sqlParam.Value = QuestionsPerCats(i)
sqlParam = cmd.Parameters.Add("@CategoriesID", SqlDbType.SmallInt)
sqlParam.Value = Cats(i)
Run Code Online (Sandbox Code Playgroud)
不幸的是"渲染"之类的
SELECT TOP @QuestionsPerCats * From Questions WHERE CategoriesID = @CategoriesID ORDER BY NEWID()
Run Code Online (Sandbox Code Playgroud)
并返回以下错误
Incorrect syntax near …Run Code Online (Sandbox Code Playgroud) 我正在尝试在VB.Net中创建一个类型大小的参数数组:
Dim parameters() As SqlParameter = New SqlParameter() _
{
New SqlParameter("@first_name", SqlDbType.VarChar, 50) {Value = "john"},
New SqlParameter("@last_name", SqlDbType.VarChar, 50) {Value = "doe"},
New SqlParameter("@age", SqlDbType.Int) {Value = 18},
New SqlParameter("@id", SqlDbType.Int) {Value = 123}
}
Run Code Online (Sandbox Code Playgroud)
但VS说:价值'没有宣布.由于其保护级别,它可能无法访问
上面的代码有什么问题?
谢谢!
我使用以下代码:
string cmd = "INSERT INTO " + Tables.Lux() + " VALUES(NULL, @Position, @Mode, @Timer)";
try
{
using (var MyConnection = new MySqlConnection(ConfigurationManager.ConnectionStrings["DataFormConnection"].ConnectionString))
{
using (MySqlCommand command = new MySqlCommand(cmd, MyConnection))
{
MyConnection.Open();
command.Parameters.Add(new MySqlParameter("Position", Element.Position));
command.Parameters.Add(new MySqlParameter("Mode", Element.Mode));
command.Parameters.Add(new MySqlParameter("Timer", Element.Timer));
command.ExecuteNonQuery();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用上面的代码从包含100个项目的元素列表中插入数据.我想只在一个查询中添加100个值,我知道SQL语句如下所示:
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用这种MySqlCommand.Parameters方法应用该结构.
我的目标是传递此函数List<Element>而不是仅仅传递此函数Element并创建一个INSERT语句,其中列表中的所有项目仅在一个查询中执行.有什么帮助吗?
谢谢.
我有一个函数,可以向SQL Server数据库发送两个请求。但是,在第二个请求上,我得到一个SqlException并且参数@mpe丢失。如果我尝试0在的构造函数中设置常量值SqlParameter。
protected static string GetX(int mpe, string xsection, string xkey)
{
var xSetup = App.Current.Db.GetType<Data.CachedTypes.XSetup>(
"where mpehotel=@mpe and xsection=@xsection and xkey=@xkey",
new System.Data.SqlClient.SqlParameter("@mpe", mpe),
new System.Data.SqlClient.SqlParameter("@xsection", xsection),
new System.Data.SqlClient.SqlParameter("@xkey", xkey));
if (mpe > 0 && xSetup == null)
{
// Fallback mechanism. Always tries to get the default for all MPEs.
xSetup = App.Current.Db.GetType<Data.CachedTypes.XSetup>(
"where mpehotel=@mpe and xsection=@xsection and xkey=@xkey",
new System.Data.SqlClient.SqlParameter("@mpe", 0), <-- THIS FAILES!!
new System.Data.SqlClient.SqlParameter("@xsection", xsection),
new System.Data.SqlClient.SqlParameter("@xkey", …Run Code Online (Sandbox Code Playgroud) sqlparameter ×10
c# ×5
sql ×5
sql-server ×4
vb.net ×3
asp.net ×2
arrays ×1
escaping ×1
mysql ×1