C# c int和string的值相同,但有两个不同的数字

C# c int和string的值相同,但有两个不同的数字,c#,C#,你好! 我遇到了一个问题,当我执行SQL查询并希望返回一个int值时,该查询假设返回一个零值,但当我得到int时,它将自动变为48,但当我从string得到时,它将是零,这是我的代码 string SQLCtn = @"SELECT sum(t7.Qty) AS Ctn FROM dbFBHDR t1, dbFBDTL t7, dbProduct t3 LEFT OUTER JOIN dbClass t4

你好! 我遇到了一个问题,当我执行SQL查询并希望返回一个int值时,该查询假设返回一个零值,但当我得到int时,它将自动变为48,但当我从string得到时,它将是零,这是我的代码

string SQLCtn = @"SELECT sum(t7.Qty) AS Ctn 
                        FROM dbFBHDR t1, dbFBDTL t7, dbProduct t3 LEFT OUTER JOIN dbClass t4 
                        ON t3.PClass = t4.Class LEFT OUTER JOIN dbCategory t5 
                        ON t3.PClass = t5.Class 
                        AND t3.PCategory = t5.Category LEFT OUTER JOIN dbType t6 
                        ON t3.PClass = t6.Class 
                        AND t3.PCategory = t6.Category 
                        AND t3.PType = t6.PType 
                        WHERE t7.ProductCode = t3.Code 
                        AND t3.PClass = '" + PDC.classBeer + "' " +
                        "AND t3.PCategory >= '" + PDC.catBeerFrom + "' " +
                        "AND t3.PCategory <= '" + PDC.catBeerTo + "' " +
                        "AND t3.PType = '" + PDC.typeCTN + "' " +
                        "AND t1.Status = 'CLOSED' " +
                        "AND t1.CashNo = t7.CashNo " +
                        "AND t1.Branch = t7.Branch " +
                        "AND t1.CashDate >= '" + PDC.DateFrom + "' " +
                        "AND t1.CashDate <= '" + PDC.DateTo + "' " +
                        "AND t1.Branch = '" + PDC.branch + "' " +
                        "AND extract(hour from CheckInTime) >= '0' " +
                        "AND extract(hour from CheckInTime) <= '9999'";

        FbCommand cmdCTN = new FbCommand(SQLCtn, FbCon);
        cmdCTN.ExecuteNonQuery();
        FbDataReader readerCTN = cmdCTN.ExecuteReader();
        while (readerCTN.Read() == true)
        {
            int iCTN;
            string sCTN;

            if (readerCTN["Ctn"].ToString() == "")
            {
                iCTN = '0';
                sCTN = "0";
                MessageBox.Show("" + iCTN + "", "int");
                MessageBox.Show("" + sCTN + "", "string");
            }
            else
            {
                iCTN = readerCTN.GetInt32(readerCTN.GetOrdinal("Ctn"));
                sCTN = readerCTN.GetString(readerCTN.GetOrdinal("Ctn"));
                MessageBox.Show("" + iCTN + "", "int");
                MessageBox.Show("" + sCTN + "", "string");
            }
        }
这就是结果

您将字符“0”转换为int,因此可以看到其ASCII代码48


只分配0,iCTN=0

为了澄清盖伊的答案,计算机将所有数据视为一个数字系统,与我们熟悉的十进制非常相似

没有A、b、6或任何其他字母与计算机相连。事实上,即使是0和1,我们用来计算二进制数的数字正是我们表示计算机所看到的东西的方式

为了在字符串中表示字母和数字,我们使用约定。其中最早和广泛使用的是,但其他类似的也存在

如果查看表中的ASCII码,数字“0”表示为48,字母“A”表示为65,字母“A”表示为97。对于计算机而言,它们始终是数字48、65和97,但如果您告诉计算机将它们视为字符或字符串,那么在屏幕上它们将代表“0”、“a”和“a”

到计算机int foo='0';与int foo=48相同;
类似地,char bar=65;与char bar='A'相同

字符来自SQL?@TeoLawrence否,字符来自iCTN='0';行@我在回答中给出了答案,用整数0。我明白了!非常感谢。为什么还有人没有读过:*在Unicode中,UTF8是字节表示法之一,前128个字符的位置与ASCII等效字符的位置相同。ASCII并没有超出这个范围,Unicode有。如果不说ASCII被广泛使用是什么意思,这是相当误导的。ASCII不用于.NET文本数据类型。