1. Eviews中使用命令輸入的方法,在文件中添加y和 x1序列
1、建一個范圍在1—15的非時間序列工作文件,使用create命令,創建窗口,將workfile structure type 下拉改為undated,在Observations輸入15,點擊OK。
2. C語言使用命令行參數問題
./test a 3 data
shell程序會找到test,然後在啟動test程序前,把"test" "a" "3" "data"壓入程序的棧中,作為程序啟動的參數。test也就是程序名,一般作為第一個參數傳進去,所以mian總共收到了4個參數,此時argc==4,argv[0]="test",argv[1]="a",argv[2]="3",argv[2]="data"
3. 如何通過parameters傳遞參數給dbhelper
在c#中執行sql語句時傳遞參數的小經驗
1、直接寫入法:
例如:
int Id =1;
string Name="lui";
cmd.CommandText="insert into TUserLogin values("+Id+",'"+Name+"')";
因為Id是數值,所以在傳遞的時候只需要在sql字元串中用"+Id+"即可實現,而 Name是字元串,所以在傳遞的時候還需要在"+Name+"兩邊各加一個單引號(')來 實現;
2、給命令對象添加參數法:
例如:
int Id =1;
string Name="lui";
cmd.CommandText="insert into TUserLogin values(@Id,@Name)";
//上條語句中直接在sql語句中寫添加的參數名,不論參數類型都是如此.
SqlParameter para=new SqlParameter("@Id",SqlDbType.int,4);//生成一個名字為@Id的參數,必須以@開頭表示是添加的參數,並設置其類型長度,類型長度與資料庫中對應欄位相同
para.Value=Id;//給參數賦值
cmd.Parameters.Add(para);//必須把參數變數添加到命令對象中去。
//以下類似
para=new SqlParameter("@Name",SqlDbType.VarChar,16);
para.Value=Name;
com.Parameters.Add(para);
...然後就可以執行資料庫操作了。
SqlParameter用法
SqlParameter[] parameters = { new SqlParameter("@a", "a1"), new SqlParameter("@b", "b1") };
string strReturn = "";
StringBuilder strBulResult = new StringBuilder();
foreach (SqlParameter parameter in parameters)
{
strBulResult.Append(parameter.ParameterName);
strBulResult.Append(":");
strBulResult.Append(parameter.SqlValue);
strBulResult.Append("\n");
}
strReturn = strBulResult.ToString();
SqlParameter用法
關於Sql注入的基本概念,相信不需多說,大家都清楚,經典的注入語句是' or 1=1--
單引號而截斷字元串,「or 1=1」的永真式的出現使得表的一些信息被暴露出來,如果sql語句是select * from 的話,可能你整個表的信息都會被讀取到,更嚴重的是,如果惡意使用都使用drop命令,那麼可能你的整個資料庫得全線崩潰。
當然,現在重點不是講sql注入的害處,而是說說如何最大限度的避免注入問題。
sql注入的存在在最大危害,是sql的執行語句沒有和控制語句分開,我們想要select一些東西,但用戶可能拼出' or 1=1甚至再加上delete/update/drop,後來是屬於控制語句了,所以要避免sql的注入,就必須把查詢語句與控制語句分開。
SqlParameter給我們提供了一個很好的類,有了它,我們可以不現拼接字元串,也可以不再擔心單引號帶來的慘劇,因為,這一切會有人來為我們完成的。
簡單的給個示例
傳統的查詢語句的sql可能為
string sql="select * from users where user_id='"+Request.QueryString["uid"]+"'";
很顯然,我們在這里拼接了字元串,這就給sql注入留下了可乘之機。
現在,我們要改寫這樣的語句,使用SqlParameter來做
SqlCommand SqlCmd = new SqlCommand(sql, SqlConn);
SqlParameter _userid = new SqlParameter("uid", SqlDbType.Int);
_userid.Value = Request.QueryString["u_id"];
SqlCmd.Parameters.Add(_userid);
這樣,我們可以保證外接參數能被正確的轉換,單引號這些危險的字元也會轉義了,不會再對庫造成威脅。
當然,這僅是一個示例而已,在真實的情況下,可能你還要對 Request.QueryString["u_id"]進行必要的檢測與分析,這樣才安全
所以,使用參數化的sql語句,是一種很好的做法
Dim sql As StringBuilder = New StringBuilder()
sql.Append("")
sql.Append("SELECT * FROM test")
sql.Append(" WHERE a= @p1 ")
Dim command As SqlCommand = dac.CreateCommand(sql.ToString()) 'dac為自己寫的類
Dim param As SqlParameter = New SqlParameter()
param .ParameterName = "@p1"
param .SqlDbType = SqlDbType.NVarChar
param .Value = b 'b為該函數的參數(ByVal b as String)
command .Parameters.Add(param)
Dim reader As SqlDataReader = command.ExecuteReader()
SqlParameter 構造函數
SqlParameter 構造函數 (String, SqlDbType, Int32, ParameterDirection, Byte, Byte, String, DataRowVersion, Boolean, Object, String, String, String)
初始化 SqlParameter 類的一個新實例,該類使用參數名、參數的類型、參數的長度、方向、精度、小數位數、源列名稱、DataRowVersion 值之一、用於源列映射的布爾值、SqlParameter 的值、此 XML 實例的架構集合所在的資料庫的名稱、此 XML 實例的架構集合所在的關系架構以及此參數的架構集合的名稱。
命名空間: System.Data.SqlClient
程序集: System.Data(在 system.data.dll 中)
C#
public SqlParameter (
string parameterName,
SqlDbType dbType,
int size,
ParameterDirection direction,
byte precision,
byte scale,
string sourceColumn,
DataRowVersion sourceVersion,
bool sourceColumnNullMapping,
Object value,
string xmlSchemaCollectionDatabase,
string ,
string xmlSchemaCollectionName
)
參數
parameterName
要映射的參數的名稱。
dbType
SqlDbType 值之一。
size
參數的長度。
direction
ParameterDirection 值之一。
precision
要將 Value 解析為的小數點左右兩側的總位數。
scale
要將 Value 解析為的總小數位數。
sourceColumn
源列的名稱。
sourceVersion
DataRowVersion 值之一。
sourceColumnNullMapping
如果源列可為空,則為 true;如果不可為空,則為 false。
value
一個 Object,它是 SqlParameter 的值。
xmlSchemaCollectionDatabase
此 XML 實例的架構集合所在的資料庫的名稱。
包含此 XML 實例的架構集合的關系架構。
xmlSchemaCollectionName
此參數的架構集合的名稱。
備注
如果未在 size 和 precision 參數中顯式設置 Size 和 Precision,則從 dbType 參數的值推斷出它們。
4. 怎樣輸data命令
給你常用的吧,網上復制一堆也不實用
常規模式:如果什麼都不輸入,15秒後自動默認常規模式。玩家只能選擇自己方酒館的英雄
全選模式:-ap/-allpick 玩家可以選擇所有酒館的英雄
全體隨機模式:-ar/-allrandom 玩家從所有酒館的范圍里自動隨機得到一個英雄。和反轉模式不兼容。
隨機徵召模式: -rd/-randomdraft 22個隨機英雄從所有酒館里選出來,並且放在地圖左上的樹林中。然後玩家按照聯賽模式選擇這些英雄。與鏡像競賽模式,死亡競賽模式,全敏捷英雄模式,全智力英雄模式,全力量英雄模式,相同英雄模式,反轉模式不兼容
然後是-REPICK,這個是重新選個英雄,但是要損失一點錢貌似100多
最後一個是-swap X(X代表數字)對應自己方英雄的編號,第一個就是1,第五個就是5,這個命令和可以和對方換英雄,雙方都要打的
5. linux 文件內容作為參數傳給命令行命令
for line in $(<a.txt); do ps -ef | grep $line; done
6. 今天建了專門的類來處理數據操作的 大家看怎麼樣,另外還需一個功能就是sql語句的傳參問題
這是我以前寫的一個數據工廠里摘出來的。你看看
/// <summary>
/// 對連接對象執行 SQL 語句
/// </summary>
/// <param name="strSql">SQL語句</param>
/// <param name="cmdType">SQL語句類型</param>
/// <param name="pars">參數組</param>
/// <returns>影響的行數</returns>
public int ExecNonQuery(string strSql, CommandType cmdType, IDataParameter[] pars)
{
if (strSql.Length <= 0 || string.IsNullOrEmpty(strSql))
throw new ArgumentNullException("無效的Sql語句");
try
{
IDbCommand cmd = db.CreateCommand(strSql, cmdType, conn, pars);
Open();
int Resule = cmd.ExecuteNonQuery();
Close();
return Resule;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public IDbCommand CreateCommand(string strSql, CommandType CmdType, IDbConnection conn, IDataParameter[] pars)
{
if (string.IsNullOrEmpty(Dbprovider) || Dbprovider.Length <= 0)
throw new ArgumentException("請設置數據提供者");
IDbCommand cmd = Factory.CreateCommand();
cmd.CommandText = strSql;
cmd.CommandType = CmdType;
cmd.Connection = conn;
if (pars != null)
{
foreach (IDataParameter par in pars)
cmd.Parameters.Add(par);
}
return cmd;
}
7. 怎樣把數據從一個程序傳給另一個程序
有好幾種基本的方法可以完成這項任務----你可以通過文件或內存來傳遞這些數據。這些方法的步驟都相當簡潔:首先,定義在何處存放數據,如何獲取數據,以及如何通知另一個程序來獲取或設置數據;然後,你就可以獲取或設置數據了,盡管使用文件的技術定義和實現起來都比較簡單,但它的速度往往比較慢(並且容易引起混亂)。因此,這里重點討論內存數據轉移技術。下面將依次詳細地分析這一過程的每一個環節: 定義在何處存放數據。當你編寫要共享數據的兩個程序時,你應該讓程序知道要訪問的數據存放在何處。這個環節同樣有幾種實現方法:你可以在一個(或每個)程序中建立一個固定的內部緩沖區,並在兩個程序之間傳遞指向這個緩沖區的指針;你也可以為數據分配動態內存,並在兩個程序之間傳遞指向該數據的指針;如果要傳遞的數據很小,你還可以通過CPU的通用寄存器來傳遞數據(這種可能性很小,因為x86結構的寄存器很少)。分配動態內存是最靈活和模塊性最強的方法。 定義獲取數據的方法。這個環節非常簡潔——你可以使用fmemcpy()或等價的內存拷貝函數。顯然,在獲取和設置數據時都可以使用這個函數。 定義通知另一個程序的方法。因為DOS並不是一個多任務操作系統,所以其中一個(或兩個)程序的一部分必須已經駐留在內存中,並且可以接受來自另一個程序的調用。同樣,這個環節也有幾種方法可供選擇:第一個程序可以是一個列入CONFIG.SYS中的驅動程序,它在系統啟動時就被裝入內存;第一個程序也可以是一個TSR(終止並駐留)程序,在它退出時會把與第二個程序相互作用的那部分程序駐留在內存中;此外,你也可以在第一個程序中利用system()或spawn()函數(見20.11)來啟動第二個程序。你可以根據需要選擇合適的方法。因為有關DOS驅動程序的數據傳遞在DOS文檔中已經有詳盡的描述,而有關system()和spawn()函數的內容也已經在前文中介紹過,因此下面介紹TSR方法。 下面的例子給出了兩個程序:第一個程序是一個完整的TSR程序,但為了突出整個過程中的關鍵環節,它寫得比較單薄(見20.15中的解釋)。這個TSR程序先是安裝了一個中斷63H的中斷服務程序,然後調用終止並駐留退出函數,在執行這個TSR程序後,執行下文給出的另一個程序。這個程序只是簡單地初始化一個對中斷63H的調用(類似於使用中斷21H調用),並且把「Hello There」傳送給上述TSR程序 # include <stdlib. h> # include <dos. h> # include <string. h> void SetupPointers (void) ; void OutputString(char * ); # define STACKSIZE 4096 unsigned int near OldStackPtr; unsigned int near OldStackSeg; unsigned int _near MyStackOff ; unsigned int _near MyStackSeg; unsigned char_near MyStack[STACKSIZE]; unsigned char far * MyStackPtr= (unsigned char_far * )MyStack; unsigned short AX, BX,CX, DX,ES; / * My interrupt handler * / void_interrupt_far_cdecl NewCommVector ( unsigned short es, unsigned short ds, unsigned short di, unsigned short si, unsigned short bp, unsigned short sp, unsigned short bx, unsigned short dx, unsigned short cx, unsigned short ax, unsigned short ip, unsigned short cs, unsigned short flags) ; / * Pointers to the previous interrupt handier * / void(_interrupt_far_cdecl * CommVector)(); union REGS regs; struet SREGS segregs ; # define COMM_VECTOR 0x63 / * Software interrupt vector * / / * This is where the data gets passed into the TSR * / char_far * eallerBufPtr; char localBuffer[255]; / * Limit of 255 bytes to transfer * / char_far * localBufPtr=(ehar_far * )loealBuffer; unsigned int ProgSize= 276; / * Size of the program in paragraphs * / void main(int argc,char * * argv) { int i, idx; / * Set up all far pointers * / SetupPointers () ; / * Use a cheap hack to see if the TSR is already loaded tf it is, exit,doing nothing * / comm_veetor =_dos_getvect (COMM_VECTOR) ; if(((long)eomm_vector & 0xFFFFL) == ((long) NewCommVector & OxFFFFL ) ) { OutputString("Error :TSR appears to already be loaded. \n"); return ; / * If everything's set,then chain in the TSR * / _dos_setvect (COMM_VECTOR ,NewCommVector) ; / * Say we are loaded * / OutputString("TSR is now loaded at 0x63\n"); / * Terminate, stay resident * / dos_keep (0, ProgSize ) ; } / * Initializes all the pointers the program will use * / void Set upPointers ( ) { int idx ; / * Save segment and offset of MyStackPtr for stack switching * / MyStackSeg = FP_SEG (MyStackPtr) ; MyStackOff = FP_OFF (MyStackPtr) ; / * Initialize my stack to hex 55 so I can see its footprint if I need to do debugging * / for (idx = 0 ;idx<STACKSIZE ; idx ++ ) { MyStack [idx] = 0x55 ; } } void _interrupt_ far_cdecl NewCommVector ( unsigned short es, unsigned short ds, unsigned short di, unsigned short si, unsigned short bp, unsigned short sp, unsigned short bx, unsigned short dx, unsigned short cx, unsigned short ax, unsigned short ip, unsigned short cs, unsigned short flags) { AX = ax; BX = bx ; CX = cx; DX = dx ; ES = es ; / * Switch to our stack so we won't run on somebody else's * / _asm { ;set up a local stack eli ; stop interrupts mov OldStackSeg,ss ; save stack segment mov OldStackPtr,sp ; save stack pointer (offset) mov ax,ds ; replace with my stack s mov ss,ax ; ditto mov ax,MyStackOff ; replace with my stack s add ax,STACKSIZE-2 ;add in my stack size mov sp ,ax ; ditto sti ; OK for interrupts again } switch (AX) { case 0x10; / * print string found in ES:BX */ / * Copy data from other application locally * / FP_ SEG (callerBufPtr) = ES ; FP_OFF (callerBufPtr) = BX ; _fstrcpy (localBufPtr, callerBufPtr ) ; / * print buffer 'CX' number of times * / for(; CX>0; CX--) OutputString (localBufPtr) ; AX=1; /* show success */ break ; case 0x30: /* Unload~ stop processing interrupts * / _dos_setvect (COMM_VECTOR ,comm_vector) ; AX=2; /* show success */ break ; default : OutputString (" Unknown command\r\n" ) ; AX= 0xFFFF; / * unknown command-1 * / break ; } / * Switch back to the caller's stack * / asm { cli ;turn off interrupts mov ss,OldStackSeg ;reset old stack segment mov sp,OldStackPtr ;reset old stack pointer sti ;back on again } ax=AX; /* use return value from switch() */ } / * avoids calling DOS to print characters * / void OutputString(char * str) { int i ; regs. h. ah = 0x0E ; regs. x. bx = 0 ; for(i=strlen(str) ; i>0; i--,str++){ regs. h. al= * str; int86 (0xl0, ®s, ®s) ; } } 上述程序是這兩個程序中的TSR程序。這個程序中有一個NewCommVector()函數,它被安裝在中斷63H(63H通常是一個可用的向量)處作為中斷服務程序。當它被安裝好後,它就可以接收命令了。switch語句用來處理輸入的命令,並作出相應的反應。筆者隨意選擇了0x1O和0x30來代表這樣兩條命令:「從ES:BX處復制數據,並列印到屏幕上,CX中的數值為列印次數」;「脫離中斷63H,並停止接收命令」。下面是第二個程序——向中斷63H發送命令的程序(注意它必須在Large模式下編譯)。 # include <stdlib. h> # include <dos. h> # define COMM VECTOR 0x63 union REGS regs; struct SREGS segregs ; char buffer[80]; char _far * buf=(char_far *)buffer; main (int argc,char * * argv) { intcnt; cnt = (argo= =1 ? 1:atoi(argv[1])) ; strcpy (bur, "Hello There\r\n" ) ; regs. x. ax= 0x10; regs. x. cx=cnt ; regs. x. bx=FP OFF(buf); segregs, es=FP SEG(buf) ; int86x(COMM_VECTOR ,®s, &segregs) ; printf ("TSR returned %d\n" ,regs. x. ax) ; } 你可能會認為這個短小的程序看上去和那些通過調用int 21或int 10來在DOS中設置或檢索信息的程序差不多。如果你真的這么想,那就對了。唯一的區別就是現在你所用的中斷號是63H,而不是21H或10H。上述程序只是簡單地調用前文中的TSR程序,並要求後者把es:bX所指向的字元串列印到屏幕上,然後,它把中斷處理程序(即那個TSR程序)的返回值列印到屏幕上。 當字元串"Hello There」被列印到屏幕上後,在兩個程序之間傳遞數據的全部必要步驟就都完成了。這個例子的真正價值在於它能夠舉一反三。現在你能很輕松地編寫一個這樣的程序,它將發送一條類似於「把要求你列印的最後一個字元串傳遞給我」的命令。你所要做的就是在前述TSR程序的switch語句中加入這條命令,然後再寫一個程序來發送這條命令。此外,你也可以在第二個程序中利用20.11中所介紹的system()或spawn()函數來啟動前述TSR程序。由於TSR程序會檢查自己是否已被裝入,因此你只需裝入一次TSR程序,就可以多次運行第二個程序了。在所有要和前述TSR程序通信的程序中,你都可以使用這里所說的方法。 在建立前述TSR程序時,需要有幾個前提條件。其一就是沒有其它重要的中斷服務程序也在處理中斷63H。例如,筆者原來在程序中使用的是中斷67H,結果該程序能正常裝入並運行,但此後筆者就無法編譯程序了,因為Microsoft用來運行C編譯程序的DOS擴展程序也要使用中斷67H。在筆者發送了命令0x30(讓程序卸載自身)後,編譯程序又能正常運行了,因為DOS擴展程序的中斷處理程序已被該程序恢復了。 第二個前提條件與駐留檢查在關。筆者假設永遠不會有另一個中斷處理程序使用和NewCommVector()相同的近程型地址,盡管這種巧合的可能性極小,但讀者應該知道該程序並不是萬無一失的。在該程序中,筆者特意讓NewCommVector()使用自己的棧,以避免它運行在調用它的程序的棧上,但是,筆者還是假設調用所需的任何函數都是安全的。注意,該程序沒有調用printf(),因為它佔用較多的內存,並且要調用DOS(int 21)來列印字元。在該程序中,當中斷63H發生時,筆者不知道DOS是否可以被調用,因此不能假設可以使用DOS調用。 注意,在該程序中,可以調用那些沒有用到DOS int21服務程序的函數來完成所需的任務,如果必須使用一個DOS服務程序,你可以在中斷63H發生時檢查DOS忙標志,以確定當時DOS是否可以被調用。最後,對dos_keep()作一點說明:該函數要求知道在程序退出時要在內存中保留多少段(每段16位元組)數據。在本例這個TSR程序中,提供給該函數的段數(276)稍大於整個可執行程序的大小。當你的程序變大時,提供給該函數的段數也必須增大,否則就會出現一些異常現象。
希望採納