C# 的字符串的基础问题:有关“@”、“?”的用法

zzmdegm 2008-04-22 10:34:00
const string PARM_PRODUCTSTYPE_ID = "@ID";
const string Path=@"c:\a.xml";
const string SQL_UPDATE_PRODUCTSTYPEINFO = "UPDATE ProductsType SET TypeName = ?,[Level] = ? WHERE [ID]= ?;";

以上的“@”、“?”的用法是什么啊?
...全文
94 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzmdegm 2008-04-29
  • 打赏
  • 举报
回复
//Access里面用参数对象,字符中用“?”做为占位符
private const string SQL_INSERT_PRODUCTSTYPEINFO = "INSERT INTO ProductsType ( [TypeName], [Level] ) VALUES ( ?,? );";
//ms-sql里面用参数对象,字符中用命名的参数做为占位符。这里的命名的参数必须与参数对象定义(getParameterSql)的名字一致
private const string SQL_INSERT_PRODUCTSTYPEINFO_sql = "INSERT INTO ProductsType ( [TypeName], [Level] ) VALUES ( @ProductsTypeName,@ProductsTypeLevel );";
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
insertSQL();
//insertAccess();
}

//得到参数对象Access
public OleDbParameter[] getParameterAccess(string paramName, int paramLevel)
{
OleDbParameter[] param = new OleDbParameter[]
{
new OleDbParameter("ProductsTypeName",OleDbType.Char),
new OleDbParameter("ProductsTypeLevel",OleDbType.Integer)
};
param[0].Value = paramName;
param[1].Value = paramLevel;
return param;
}

//得到参数对象SQL
public SqlParameter[] getParameterSql(string paramName, int paramLevel)
{
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter("@ProductsTypeName",SqlDbType.Char),
new SqlParameter("@ProductsTypeLevel",SqlDbType.Int),
};
param[0].Value = paramName;
param[1].Value = paramLevel;
return param;
}


private static string GetAccessPath()
{
string strConn;
BasePage BP = BasePage.Instance();
string filePath = BP.Server.MapPath(System.Configuration.ConfigurationManager.AppSettings.Get("AccessPath"));
strConn = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + filePath;
return strConn;
}

//访问Access数据库
public void insertAccess()
{
//OleDbConnection con = new OleDbConnection(GetAccessPath());
OleDbConnection con = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =D:\\My Documents\\Visual Studio 2005\\WebSites\\WebSiteht\\App_Data\\dbht.mdb");
OleDbCommand com = new OleDbCommand(SQL_INSERT_PRODUCTSTYPEINFO, con);
OleDbParameter[] paramcom = this.getParameterAccess("张正明", 110);
for (int i = 0; i < paramcom.Length; i++)
{
com.Parameters.Add(paramcom[i]);
}
try
{
con.Open();
com.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{ ex.ToString(); }
}

//访问SQL数据库
public void insertSQL()
{
SqlConnection con = new SqlConnection("server=(local);database=GM_B225;uid=sa;pwd=sa");
SqlCommand com = new SqlCommand(SQL_INSERT_PRODUCTSTYPEINFO_sql, con);

SqlParameter[] paramcom = getParameterSql("张正明", 110);

for (int i = 0; i < paramcom.Length; i++)
{
com.Parameters.Add(paramcom[i]);
}
try
{
con.Open();
com.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{ ex.ToString(); }
}
zzmdegm 2008-04-22
  • 打赏
  • 举报
回复
OleDbCommand.Parameters 属性
如果 CommandType 设置为 Text,OLE DB .NET 提供程序不支持将参数传递给 OleDbCommand 调用的 SQL 语句或存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。例如:

SELECT * FROM Customers WHERE CustomerID = ?

因此,OleDbParameter 对象添加到 OleDbParameterCollection 的顺序必须直接对应于命令文本中参数的问号占位符的位置。

下面的示例创建一个 OleDbCommand 并显示其参数。要完成此任务,请向该方法传递一个 OleDbConnection、一个查询字符串(它是 SQL SELECT 语句)和一个 OleDbParameter 对象数组。

public void CreateMyOleDbCommand(OleDbConnection connection,
string queryString, OleDbParameter[] parameters)
{
OleDbCommand command = new OleDbCommand(queryString, connection);
command.CommandText =
"SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
command.Parameters.Add(parameters);

for (int j=0; j<parameters.Length; j++)
{
command.Parameters.Add(parameters[j]) ;
}

string message = "";
for (int i = 0; i < command.Parameters.Count; i++)
{
message += command.Parameters[i].ToString() + "\n";
}
Console.WriteLine(message);
}

virusswb 2008-04-22
  • 打赏
  • 举报
回复
@是要后面的转义字符失效,后面的东西全部作为字符串的一部分
ericzhangbo1982111 2008-04-22
  • 打赏
  • 举报
回复
const string PARM_PRODUCTSTYPE_ID = "@ID"; 按照定义没有别的意思就是一个@字符,应该是做SqlParameter用的
const string Path=@"c:\a.xml"; 转义用的把\\转义成\


const string SQL_UPDATE_PRODUCTSTYPEINFO = "UPDATE ProductsType SET TypeName = ?,[Level] = ? WHERE [ID]= ?;"; 应该是调用access的
就是转换OleDBParameter参数用的
比如
OleDBConnection conn=new OleDBConnection("");
OleDBCommand cmd=new OleDBCommand(SQL_UPDATE_PRODUCTSTYPEINFO,conn);
cmd.Parameter.Add(new OleDbParameter("?",DataType.Varchar));
大概这个意思。懒的打了;网上好多这样的资料。




hfwang009 2008-04-22
  • 打赏
  • 举报
回复
第一个是字符串.
第二个表示@后面的是字符串.忽略转义字符.
第三个表示参数.用参数化的方式执行sql用到.
hackztx 2008-04-22
  • 打赏
  • 举报
回复
估计是替换要的,比如我们做采集的时候,页面格式为
http://xxx.xxx.com/pageID=1

就可以定义一个常量为
const string strPageFormat="http://xxx.xxx.com/pageID=|pageID|";

到时候循环替换如下:

for(int i=1;i <=10;i++)
{
string strHtml=GetPageContent(strPageFormat.Replace("|pageID|",i));
}
hackztx 2008-04-22
  • 打赏
  • 举报
回复
估计是替换要的,比如我们做采集的时候,页面格式为
http://xxx.xxx.com/pageID=1

就可以定义一个常量为
const string strPageFormat="http://xxx.xxx.com/pageID=1";

到时候循环替换如下:

for(int i=1;i<=10;i++)
{
string strHtml=GetPageContent(strPageFormat.Replace("ID=1","ID="+i));
}

blackhero 2008-04-22
  • 打赏
  • 举报
回复
const string PARM_PRODUCTSTYPE_ID = "@ID"; 就是一个字符串
const string Path=@"c:\a.xml"; 路径用@

const string SQL_UPDATE_PRODUCTSTYPEINFO = "UPDATE ProductsType SET TypeName = ?,[Level] = ? WHERE [ID]= ?;";

?三元运算符

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧